Javascript Reduce 方法创建累加器对象

标签 javascript reduce

var numbers = [5, 3, 8, 6, 9, 1, 0, 2, 2];
var oddEvenCounts = numbers.reduce(function(counts, number) {
  if (isOdd(number)) {
    counts[odd]++;
  } else {
    counts[even]++;
  }
}, {});

我正在寻找这段代码中的错误(仍在学习 reduce 方法;))——我哪里出错了?

最佳答案

带有注释的工作代码:

var numbers = [5, 3, 8, 6, 9, 1, 0, 2, 2];

function isOdd(n) {
  return !!(n % 2);
}

var oddEvenCounts = numbers.reduce(function(counts, number) {
  if (isOdd(number)) {
    counts.odd++; // use dot notation or ['odd']
  } else {
    counts.even++;  // use dot notation or ['even']
  }
  
  return counts; // return the accumulator
}, { odd: 0, even: 0 }); // set the initial values of odd and even

console.log(oddEvenCounts);

您可以使用括号符号和三元运算符来稍微缩短代码:

var numbers = [5, 3, 8, 6, 9, 1, 0, 2, 2];

function isOdd(n) {
  return !!(n % 2);
}

var oddEvenCounts = numbers.reduce(function(counts, number) {  
  counts[isOdd(number) ? 'odd' : 'even']++;
  
  return counts;
}, { odd: 0, even: 0 });

console.log(oddEvenCounts);

关于Javascript Reduce 方法创建累加器对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46331389/

相关文章:

javascript - 如何访问 jQuery.post() 返回的对象?

javascript - 为什么我的图库页面加载时间这么长?

javascript - JavaScript/React 中的点动任务实现

javascript - 无法覆盖 CSS 伪元素 :before

javascript - 如何使用reduce()来构建一个对象而不循环多次迭代

javascript - 如果在弹出窗口外单击,则关闭弹出窗口

hive - 如何将hive查询结果导出到单个本地文件?

php - 为什么我的 reduce 实现的函数组合会返回一个闭包?

javascript - 调用 reduce 对对象数组求和返回 NaN

c - 无法修复 Bison 语法中的移位/减少冲突