我创建了一个嵌套数组,每个项目都有空数组。我想用push方法将数据输入到每个索引中。但是数据不是插入到每个项目中,而是填充到所有项目中。有人能帮我解释一下这种行为吗?谢谢
let input = new Array(4).fill([]);
let data = [[0,1],[3,2],[2,1]];
for(let i = 0; i < data.length; i++){
const key = data[i][1]
const value = data[i][0]
input[key].push(value)
}
console.log(input)
4条答案
按热度按时间cgyqldqp1#
它与Array fill的行为有关。当你传递一个对象(在本例中是一个空数组)作为参数时,你所有的元素都有相同的引用。
See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill#value
w9apscun2#
数组是一个对象..您正在使用相同的对象填充数组并推送到相同的对象引用
3ks5zfa03#
您已经用***相同的***空数组填充了数组
你可以这样想
A被插入到数组中四次,并且B的任何索引都是对A的引用。
qgzx9mmu4#
在
input
变量中填充的数组是相同的,当你改变其中一个数组时,你也会改变所有链接的数组。你可以在这里阅读更多关于它的信息:https://javascript.info/object-copy