首页 > 解决方案 > reduce 可以返回一个包含 2 个值的数组吗?

问题描述

所以我正在尝试做一个 js 挑战,我必须将 x 数组的索引 0 中的偶数索引数和 x 数组的 1 索引上的奇数索引相加,我使用了 map 但我感觉它可能会更好,因为我正在使用外部数组返回并且 map 已经返回了一个新数组,我的解决方案:

    //  write code here.
    const sumOfArr = [0, 0];
    array.map((num, i) => {
        return i % 2 === 0 ? sumOfArr[0] += num : sumOfArr[1] += num
    });
    return sumOfArr
}
const nums = [50, 60, 60, 45, 70];
const result = alternatingSums(nums);
console.log("result: ", result);
expect(result).toEqual([180, 105]);

我也尝试使用reduce,但它总是返回NaN:

return array.reduce((acc, num, i) => {
        console.log(acc, '---', num, '---', i)
        return i % 2 === 0 ? acc[0] = acc[0] + num : acc[1] = acc[1] num
    }, [0, 0]);

我整个上午都在尝试用 reduce 来找出我的错误,因为我似乎只需要将数组减少到一个更小的数组。

标签: javascriptarrayshigher-order-functions

解决方案


你可以这样做:

function alternatingSums(arr) {
  return arr.reduce((acc, n, i) => {
    acc[i % 2] += n;
    return acc;
  }, [0, 0]);
}

const nums = [50, 60, 60, 45, 70];
const result = alternatingSums(nums);
console.log("result: ", result); // [180, 105]


推荐阅读