javascript 嵌套数组中的修改

jq6vz3qz  于 2023-01-07  发布在  Java
关注(0)|答案(4)|浏览(167)

我创建了一个嵌套数组,每个项目都有空数组。我想用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)
cgyqldqp

cgyqldqp1#

它与Array fill的行为有关。当你传递一个对象(在本例中是一个空数组)作为参数时,你所有的元素都有相同的引用。
See: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/fill#value

w9apscun

w9apscun2#

数组是一个对象..您正在使用相同的对象填充数组并推送到相同的对象引用

let input = new Array();
let data = [[0,1],[3,2],[2,1]];
for(let i = 0; i < data.length; i++){
   input[key] = input[key] || [];
   const key = data[i][1]
   const value = data[i][0]
   input[key].push(value)
}
console.log(input)
3ks5zfa0

3ks5zfa03#

您已经用***相同的***空数组填充了数组
你可以这样想

const a = []
const b = new Array(4).fill(a)

A被插入到数组中四次,并且B的任何索引都是对A的引用。

qgzx9mmu

qgzx9mmu4#

input变量中填充的数组是相同的,当你改变其中一个数组时,你也会改变所有链接的数组。你可以在这里阅读更多关于它的信息:https://javascript.info/object-copy

let input = new Array(4).fill([]);
let a = []
let b = []
let c = a

console.log(input[0] === input[1]) ---> true
console.log(a === b) ---> false
console.log(a === c) ---> true

相关问题