有人可以解释以下代码吗? 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;

这两个方法都可以省去您问这个问题的麻烦。

09-25 21:34