如何使用reduce在Javascript中返回一个对象?

时间:2017-09-25 03:05:36

标签: javascript arrays function object reduce

我正在尝试使用Array.reduce()方法计算数组中奇数和偶数的数量。当我运行下面的代码时,我得到错误“奇怪未定义”。如何/在哪里定义奇数以使此代码有效?

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

2 个答案:

答案 0 :(得分:6)

好吧,奇怪的是没有定义。你应该做的是将奇数/偶数放在引号(counts['odd'])中或使用点符号(counts.odd)。

此外,由于奇数和偶数都没有定义,递增它们会导致NaN。初始值应为{ odd: 0, even: 0 }



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




答案 1 :(得分:1)

这是可以为您完成的功能。

function oddEvenCounts(arr) {
  const counts = {
    even: 0,
    odd: 0
  };
  arr.forEach(n => {
    if(n % 2 === 0) {
      counts.even++;
    } else {
      counts.odd++
    }
  });
  return counts;
}

const array = [5, 3, 8, 6, 9, 1, 0, 2, 2];
console.log(oddEvenCounts(array));