有人可以解释以下代码吗? inputWords应该是一个包含多个单词的数组,并且此函数应该返回一个数组,其中包含一个单词在inputWords中出现的次数。
即。 var inputWords = ['Apple','Banana','Apple','Durian','Durian','Durian']
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
为falsey,则会评估c
并将其分配给a
。在您的情况下,当密钥不存在时,++resultObj[word]
为falsey。
以我的拙见,我认为如果他们这样做的话,将会更清楚地表明作者的意图:
if (word in resultObj) {
++resultObj[word];
}
else {
resultObj[word] = 1;
}
甚至:
resultObj[word] = word in resultObj ? resultObj[word] + 1 : 1;
这两个方法都可以省去您问这个问题的麻烦。