控制台日志记录精简数组仅返回最后一个值

时间:2017-10-09 07:51:33

标签: ecmascript-6 functional-programming

为了在js中尝试reduce,我试图用它来将2个数组值加在一起。我知道很多方法可以做到这一点而不减少,并且我认为还有减少,但问题是:当控制台记录减少的数组时,我只得到最后一个减少的值,我不知道为什么。< / p>

let dblArray = [
    [1, 2, 3],
    [4, 5, 6]
]

let arr = dblArray[0].reduce((newArr, iter, index) => {
     // this returns 5, 7, 9 as expected
    return iter + dblArray[1][index]
}, [])

console.log(arr) // this returns only 9

有人可以告诉我为什么会这样吗?我想知道我的实施是否错误。

由于

1 个答案:

答案 0 :(得分:1)

通过使用迭代器函数返回的值覆盖先前的值来减少工作量。因此,当您到达最后一次迭代时,它仅返回最后一个值。

你需要在迭代器函数中构建一个数组,加入前一个值和当前值,然后返回:

let dblArray = [
    [1, 2, 3],
    [4, 5, 6]
]

let arr = dblArray[0].reduce((previousArray, iter, index) => {
    // We can use array spread here to join the old array,
    // and add the new value to it
    return [...previousArray, iter + dblArray[1][index]];
    // On each iteration this would log:
    // [5]
    // [5, 7]
    // [5, 7, 9]
}, [])

console.log(arr)