javascript - 如何访问reduce中的第零个元素以计算数组中的重复次数

标签 javascript node.js mapreduce

Node 学校一时兴起,我尝试使用 reduce 来计算字符串在数组中重复的次数。

var fruits = ["Apple", "Banana", "Apple", "Durian", "Durian", "Durian"],
    obj = {};
fruits.reduce(function(prev, curr, index, arr){
   obj[curr] ? obj[curr]++ : obj[curr] = 1;
});
console.log(obj); // {Banana: 1, Apple: 1, Durian: 3}

有点在工作。出于某种原因,reduce 似乎跳过了第一个元素。我不知道为什么。第一次遍历数组,index1。我尝试加入一些逻辑,例如 if (index === 1){//put 'prev' as a property of 'obj'}。但这似乎确实令人费解。我确定这不是 Node 学校希望我解决这个问题的方式。但是,我想知道访问要减少的数组中第零个元素的好方法是什么。为什么这个第零个元素似乎被归约程序忽略了?我想我可以在回调之后传入 fruits[0],所以我最初从那个值开始。访问第零个元素的最佳方式是什么?

最佳答案

If no initialValue was provided, then previousValue will be equal to the first value in the array and currentValue will be equal to the second.

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/Reduce#Description

此外,您必须从函数返回一个值。该值在下一次迭代中成为 previousValue 的值。

我建议您“携带”您的聚合器 obj 作为初始值。

var fruits = ["Apple", "Banana", "Apple", "Durian", "Durian", "Durian"];
var obj = fruits.reduce(function(carry, fruit){
  if(!carry[fruit]) carry[fruit] = 0; // If key doesn't exist, default to 0
  carry[fruit]++;                     // Increment the value of the key
  return carry;                       // Return aggregator for next iteration
}, {});
alert(JSON.stringify(obj));

这是一个简单的图表:

               fruit  carry (before operation)      carry (after operation, returned value)
1st iteration: Apple  {}                            {Apple:1}
2nd iteration: Banana {Apple:1}                     {Apple:1, Banana:1} 
3rd iteration: Apple  {Apple:1, Banana:1}           {Apple:2, Banana:1}
4th iteration: Durian {Apple:2, Banana:1}           {Apple:2, Banana:1, Durian:1}
5th iteration: Durian {Apple:2, Banana:1, Durian:1} {Apple:2, Banana:1, Durian:2}
6th iteration: Durian {Apple:2, Banana:1, Durian:2} {Apple:2, Banana:1, Durian:3}

关于javascript - 如何访问reduce中的第零个元素以计算数组中的重复次数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31465480/

相关文章:

java - Riak/Java - 使用 AND 条件和排序对二级索引进行 MapReduce 查询的最佳实践

java - Hadoop MapReduce 中的 Reducer 类未按预期工作

javascript - 如何在单击加载时隐藏除 anchor href 引用的第一个 div 之外的所有内容

javascript - 如何确保用户在 Javascript 中输入有效的数字?

javascript - 制作javascript动画div并插入文本

javascript - Require.js + R.js 优化器忽略 Shim

javascript - 如何将子元素设置为可放置为 false

javascript - 这是一个好的服务器负载平衡系统吗?

javascript - Nodejs - 如果路径/api - 服务 api,如果不是 - 服务静态文件

csv - 运行hadoop/mapReduce时发生ClassNotFoundException