[英]Push spliced array to empty array in JavaScript
我想遍历一个数组并在添加前 n 个数字后将它们连续推入另一个数组:
let arr = []
let iniArr = [...Array(9).keys()].map(item=>1)
let push = iniArr.slice(0,3).reduce((total,num)=>total+num)
for (let i = 0; i < 3; i++) {
iniArr.splice(i,3)
iniArr.splice(i,0,push)
arr.push(iniArr)
}
我没有得到预期的结果,而是每次推送的整个迭代的最终结果:
(3) [Array(3), Array(3), Array(3)]
0: (3) [3, 3, 3]
1: (3) [3, 3, 3]
2: (3) [3, 3, 3]
但是,如果我 console.log 它们我会在数组中返回我想要的结果:
for (let i = 0; i < 3; i++) {
iniArr.splice(i,3)
iniArr.splice(i,0,push)
console.log(iniArr)
}
(7) [3, 1, 1, 1, 1, 1, 1]
(5) [3, 3, 1, 1, 1]
(3) [3, 3, 3]
有人可以解释为什么会这样吗?
我必须使用传播语法,
arr.push([...iniArr])
//instead of
arr.push(iniArr)
但我仍然不明白为什么。
您将iniArr
的引用推送到arr
3 次,并且任何时候iniArr
数据更改, arr
都会恭敬地显示它。
正如您所发现的,当您像[...iniArr]
一样传递iniArr
的值并且这些值是原始的(就像您在此处使用的数字一样)时,它们会将它们的值推送到arr
,而不是改变,不不管iniArr
发生了什么
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.