問題
JavaScriptの練習問題で、文字列の中からどの文字が、何回使用されているかを探す問題です。
その結果をオブジェクトで出力します。
問題:
function howManyTimes(message) { // code } // {'a': 1, ' ': 2, 'c': 1, 'e': 1, 'I': 1, 'k': 1, 'l': 1, 'i': 1, 's': 1, 't': 1} howManyTimes('I like cats');
回答例と違うやり方でとけたのですが、回答例で使用されていたreduce
のやり方が理解できませんでした。
私が書いたコード
function howManyTimes(message) { let result = {}; for (let i of message) { let counter = 0; for (let j of message) { if (i == j) counter++; } if (counter == 1) { result[i] = 1; } else if (counter > 1) { result[i] = counter; } } return result; }
わからないこと
以下のコードが回答例ですが、reduce
部分が理解できません。
とくに、return (prev[current] = (prev[current] || 0) + 1) && prev;
の&& prev
の箇所です。
return (prev[current] = (prev[current] || 0) + 1)
はオブジェクトにない場合、追加しているのは理解できています。
function howManyTimes(message) { return message.split("").reduce(function(prev, current) { return (prev[current] = (prev[current] || 0) + 1) && prev; }, {}); }
よろしくお願いします。
回答3件
あなたの回答
tips
プレビュー