Javascript:使用 || 减少函数

标签 javascript arrays reduce

有人能解释一下下面的代码吗? 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/

相关文章:

c++ - 想在整数数组的所有索引中添加一个整数

c++ - 在 C++ 中显示大小未知的 'double' 数组

javascript - 如何使用 Javascript 从关联数组中获取值

clojure - 计算集合中元素频率的复杂性是多少?

python - 为什么 python reduce() 会跳过 None 元素?

javascript - 分配给新变量,同时使用解构分配

javascript - 布伦特里客户端 : form submission failure

java - Hadoop 从映射器写入新文件

javascript - Ember.js、set() 和计算属性

javascript - Ember.js - 带有 URL 的类似 Accordion 的主细节