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

Ian*_*cht 1 javascript arrays reduce function object

我试图通过使用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;
 }, {});
Run Code Online (Sandbox Code Playgroud)

dor*_*ork 7

好吧,奇怪没有定义.你应该做的是将奇数/偶数放在引号(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);
Run Code Online (Sandbox Code Playgroud)