减少具有字符串和数字的多维数组

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

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

In the debugger I could see that reduce works fine only the first iteration (3.05)

谢谢!

评论
  • 99.90%
    99.90% 回复

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

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

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