回答編集履歴
1
可読性
answer
CHANGED
|
@@ -45,4 +45,44 @@
|
|
|
45
45
|
最も、本質問は課題コードで実用性は度外視なのだと思いますが、課題でもある程度の実用性あるコードを書かせて欲しいもので余り良い課題とは思いませんでした。
|
|
46
46
|
map,joinを使うことを条件に入れるほうが自然な気がしますね。
|
|
47
47
|
|
|
48
|
+
### 可読性
|
|
49
|
+
|
|
50
|
+
> 私の書いたコードなんですが、読みにくいでしょうか?
|
|
51
|
+
|
|
52
|
+
気になったのはコードではなく、条件「reduceを用いること」の方です。
|
|
53
|
+
質問文のコードなら、文字列が対象なのでmapは使えず、reduceを使いますが、
|
|
54
|
+
|
|
55
|
+
1. reduce後に最後のカンマを取り除く
|
|
56
|
+
2. indexが最後なら、カンマを出力しない (毎回、indexを検査するのでパフォーマンス低下)
|
|
57
|
+
3. array#shift()で最初の要素だけ別途処理してから、reduceする
|
|
58
|
+
|
|
59
|
+
の対策が必要となりますので、どれを採用するかを踏まえて吟味する必要があります。
|
|
60
|
+
個人的には**可読性は使ったコードにどれだけ熟知しているか次第**だと思うので、言及しません。
|
|
61
|
+
|
|
62
|
+
ただ、「一つの文字列を結合して増やしていく方法」は「配列からmap->joinする方法」と比較して、**パフォーマンスに優れるメリット**があります。
|
|
63
|
+
パフォーマンスを優先させるポリシーでコードを書くなら、私は `while` or `for` を使いたくなります。
|
|
64
|
+
|
|
65
|
+
```JavaScript
|
|
66
|
+
function sample (array) {
|
|
67
|
+
if (!array.length) return '{}';
|
|
68
|
+
const value = array[0];
|
|
69
|
+
let body = '{' + value + ':' + value + '0';
|
|
70
|
+
|
|
71
|
+
for (let i = 1, len = array.length; i < len; ++i) {
|
|
72
|
+
const value = array[i];
|
|
73
|
+
body += ',' + value + ':""' + value + '0"';
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
return body + '}';
|
|
77
|
+
}
|
|
78
|
+
|
|
79
|
+
const array = ["a", "b"];
|
|
80
|
+
console.log(sample(array));
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
結局、コードの良し悪しは「自分がコードに何を求めるか」次第です。
|
|
84
|
+
言い換えるなら、**何を目的として「reduceを用いること」を条件に指定したのか**です。
|
|
85
|
+
そこが読み取れませんでした。
|
|
86
|
+
背景もなしに条件が明示されたので、条件に意味はない「課題のコード」のように思いました。
|
|
87
|
+
|
|
48
88
|
Re: ah6BD2gZo5GnjnT さん
|