有人能解释一下下面的代码吗? inputWords 应该是一个包含各种单词的数组,并且该函数应该返回一个包含单词在 inputWords 中出现的次数的数组。
即。 var inputWords = ['苹果', '香蕉', '苹果', '榴莲', '榴莲', '榴莲']
console.log(countWords(inputWords))
// =>
// {
// Apple: 2,
// Banana: 1,
// Durian: 3
// }
我了解Reduce函数的作用,但是resultObj[word] =++resultObj[word] || 是什么? 1;在做什么?
非常感谢:)
function countWords(inputWords) {
return inputWords.reduce(function(resultObj, word) {
resultObj[word] = ++resultObj[word] || 1;
return resultObj;
}, {});
}
module.exports = countWords;
最佳答案
代码尝试为一个键(可能尚不存在)分配一个递增值(可能尚不存在的键),如果它是假,它会分配一个1.
这称为短路评估。鉴于a = b || c
,如果b
是真实,c
永远不会被如此评估a
取值 b
。如果b
是错误,c
被评估并分配给 a
反而。在您的情况下,当 key 不存在时, ++resultObj[word]
是假的。
以我的愚见,我认为如果他们这样做的话,这会更清楚地表达作者的意图:
if (word in resultObj) {
++resultObj[word];
}
else {
resultObj[word] = 1;
}
甚至:
resultObj[word] = word in resultObj ? resultObj[word] + 1 : 1;
无论哪一个都可以让你省去问这个问题的麻烦。
关于Javascript:使用 || 减少函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24000776/