我真的很困惑这个二维数组。例如:let arr = Array(2)
arr.fill(Array(2))
arr[0][0]=1结果arr是[1,empty][1,empty]为什么会这样?我只想将第一个数组中的第一项设置为 1
3 回答
陪伴而非守候
TA贡献1757条经验 获得超8个赞
因为您使用数组的 1 个实例来填充您的第一个数组 (arr)。所以arr[0]和arr[1]实际上是同一个实例,它们指向同一个地址。如果你想用新数组填充你的数组 arr,首先循环遍历你的数组 arr,然后为它们分配新数组。
const arr = Array(2);
for (let i = 0; i < arr.length; i++) {
arr[i] = Array(2);
}
arr[0][0] = 1;
呼啦一阵风
TA贡献1802条经验 获得超6个赞
Array(2)是复制到arr的每个元素的空数组。
但是Array(2)的所有副本都是深层副本。
因此,其中一个深拷贝的更改将反映在Array(2)的所有副本中。
let arr = Array(2)
arr.fill(Array(2))
arr[0][0]= 1
// [ [ 1, <1 empty item> ], [ 1, <1 empty item> ] ]
arr[0][1] = 2
// [ [ 1, 2 ], [ 1, 2 ] ]
慕容森
TA贡献1853条经验 获得超18个赞
文档说...
用于填充数组的值。(注意数组中的所有元素都将是这个精确值。)
这意味着它们在内存中共享相同的地址。
你需要一种不同的方法来填充你的数组..
let arr = Array.from({length: 2}, e => Array(2))
arr[0][0]=1
console.log(arr);
添加回答
举报
0/150
提交
取消