JavaScript的Reduce方法:创建累加器对象

4
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方法 😉)——我哪里出了问题?


变量evenodd中存储了什么值? - Thomas
2个回答

11

带有注释的工作代码:

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);


谢谢,非常有帮助:我知道我的问题所在——没有返回语句,我也没有正确设置计数器对象,也没有正确调用它。 - marie_antoinette

3

返回您的累加器:

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]++;
  }
  return counts;
}, {});

谢谢,这是我最常犯的错误。 - Amesys

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接