【问题标题】:How to use reduce to return an object in Javascript?如何使用reduce在Javascript中返回一个对象?
【发布时间】:2017-09-25 03:05:35
【问题描述】:

我正在尝试使用 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;
 }, {});

【问题讨论】:

  • 使用counts.oddcounts.even代替counts[....]甚至counts["odd"]counts["even"]
  • 键必须是字符串...

标签: javascript arrays function object reduce


【解决方案1】:

好吧,奇数没有定义。您应该做的是将奇数/偶数放在引号中 (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);

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      使用 ES6+ 回答

      const sumEvenOdd = (numbersArray) => {
          return numbersArray.reduce((acc, current) => current % 2 === 0 ? {...acc,'even':acc['even'] + current} : {...acc, 'odd':acc['odd'] + current}, {"even":0, "odd":0})
      }'
      
      console.log(sumEvenOdd([1, 6, 8, 5, 3]));
      // Expected results: {even: 14, odd: 9}
      

      【讨论】:

      • 请用代码块格式化您的代码
      猜你喜欢
      • 2021-07-21
      • 2017-07-11
      • 2021-05-25
      • 2014-05-22
      • 2021-10-25
      • 2021-07-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多