Javascript: Reduce function with ||

Javascript: Reduce function with ||

本文关键字:with function Reduce Javascript      更新时间:2023-09-26

谁能解释一下下面的代码?inputWords应该是一个包含各种单词的数组,该函数应该返回一个包含单词在inputWords中出现次数的数组。

ie。var inputWords =['苹果','香蕉','苹果','榴莲','榴莲','榴莲']

console.log(countWords(inputWords))
// =>
// {
//   Apple: 2,
//   Banana: 1,
//   Durian: 3
// }

我理解Reduce函数的作用,但是resultObj[word] = ++resultObj[word] || 1;在做什么?

Thanks so much:)

function countWords(inputWords) {
  return inputWords.reduce(function(resultObj, word) {
    resultObj[word] = ++resultObj[word] || 1;
    return resultObj;
  }, {});
}
module.exports = countWords;

代码尝试为一个键(可能还不存在)分配一个递增值,如果false ,则赋值1。

这称为短路求值。给定a = b || c,如果b 为真,则c不被求值,因此ab的值。如果bfalse ,则计算c并将其赋值给a。在您的示例中,当键不存在时,++resultObj[word]为false。

在我看来,我认为如果他们这样做的话,会更清楚地说明作者的意图:

if (word in resultObj) {
    ++resultObj[word];
}
else {
    resultObj[word] = 1;
}

甚至:

resultObj[word] = word in resultObj ? resultObj[word] + 1 : 1;

resultObj中不存在的密钥"默认"为1

Javascript的||实际上会在比较中返回第一个(最左边的)真值,所以对于一个不存在的值,通过预增运算符(如++resultObj['banana'])添加一个,返回NaN,这是假的,||运算符将用1替换它。

编辑:参见http://nfriedly.com/techblog/2009/07/advanced-javascript-operators-and-truthy-falsy/

我会写:

resultObj[word] = (resultObj[word] || 0) + 1;