繁体   English   中英

有人可以在这里解释“push”是怎么回事吗?

[英]Can someone explain what is going on with `push` here?

感觉push的行为很有趣。 而不是仅仅推送到forEach内的 1 个索引,它似乎正在推送到所有 3 个索引。 我错过了一些明显的东西吗?

 let arrayToReduce = [ [ 1, 2, 3 ] ] let reduced = arrayToReduce.reduce((arr, inner) => { const copied = arr.slice() inner.forEach((num, idx) => { copied[idx].push(num) }) return copied }, Array(arrayToReduce[0].length).fill([])) console.log(reduced)

预期 output: [[1], [2], [3]]

实际 output: [[1, 2, 3], [1, 2, 3], [1, 2, 3]]

push不是罪魁祸首,而是fill

您创建了一个与原始数组长度相同的数组,然后用一个值填充它。

该值是一个数组。

同一个数组。

因此,当您将一个值推送到copied[0]时,您将获得对该数组的引用并将一个值放入其中。

当您将一个值推送到copied[1]时,您将获得对同一数组的引用并将另一个值放入其中。

    let arr = [ [ 7, 3, 47 ] ]
    let reduced = arr.flat().map(e=>[e])
    console.log(reduced) 

//输出:[[7],[3],[47]]

如果你想要你的预期 output: [[1], [2], [3]]

只需返回索引而不是内部数组中的项目

    let arr = [ [ 7, 3, 47 ] ]
    let reduced = arr.flat().map((e,i)=>[i+1])
    console.log(reduced)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM