javascript - 使用reduce()减少Javascript中的子数组数量

标签 javascript arrays function ecmascript-6

我想要的是执行与以下解决方案相同的操作,但用缩减函数替换整个代码。我当前的代码是:

function reduce2dArr(cash) {
    let cashList = [];
     cash.forEach(subArr => cashList.unshift(subArr[1]));
    let globalcash = cashList.reduce((a, b) => a + b);  
    return globalcash;
  } 

  reduce2dArr([["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]); //335.41

我已经尝试过这个:

function reduce2dArr(cash) {
    let globalcash = cash.reduce((subArr1, subArr2) => subArr1[1] + subArr2[1])
    return globalcash;
  } 

  reduce2dArr([["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]); // NaN

在调试器中,我可以看到 reduce 仅在第一次迭代 (3.05) 中工作正常

谢谢!

最佳答案

您需要一个起始值,因为您添加了数组的一部分并返回一个数字。

该数字是下一个值,但这不是从中获取第二个元素的数组。

function reduce2dArr(cash) {
    return cash.reduce((sum, subArray) => sum + subArray[1], 0);
}

console.log(reduce2dArr([["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]));

通过使用数组作为累加器,您需要返回一个数组来获取两个子数组的第二个元素。

function reduce2dArr(cash) {
    return cash
        .reduce((subArray1, subArray2) => [null, subArray1[1] + subArray2[1]])
        [1]; // take only the sum
}

console.log(reduce2dArr([["PENNY", 1.01], ["NICKEL", 2.05], ["DIME", 3.1], ["QUARTER", 4.25], ["ONE", 90], ["FIVE", 55], ["TEN", 20], ["TWENTY", 60], ["ONE HUNDRED", 100]]));

关于javascript - 使用reduce()减少Javascript中的子数组数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61732162/

相关文章:

function - 使用向量的 MATLAB 函数

c# - 当我不能使函数本身成为静态时如何调用非静态函数

php - 从目录中一张一张获取图片

javascript - 在函数调用时将数组解析为字符串

c# - C# .NET 中的最佳数据集合

c - 为什么 sizeof 没有返回数组中正确的元素数量?

r - 如何在函数调用中获取变量名?

javascript - 基于垂直滚动使用jquery添加/删除类

javascript - 点击图片生成Markdown代码

javascript - 无法绑定(bind)到 'routerlink',因为它不是使用 angular2-webpack-starter 的已知 native 属性