问题代码
let arr = new Array(5).fill(new Array(6).fill(0))
for(let i = 1 ; i < 5 ; i ++){
for(let j = 1 ; j < 6 ; j ++){
arr[i][j] = j+1
}
}
console.log(arr)
⬇
为什么第一行的值也发生了改变?
遇到的问题是由于JavaScript中数组的引用机制导致的。当使用new Array(5).fill(new Array(6).fill(0))创建数组时,实际上是创建了一个包含5个元素的数组,每个元素都是对同一个内部数组的引用。
这意味着,当修改任何一个内部数组(比如arr[i][j] = j+1)时,实际上是在修改所有内部数组,因为它们都是指向同一个数组对象。
为了解决这个问题,需要创建一个数组的数组,而不是引用的数组。这可以通过使用map方法来实现。
解决代码
let arr = Array.from({ length: 5 }, () => Array(6).fill(0));
for(let i = 1 ; i < 5 ; i ++){
for(let j = 1 ; j < 6 ; j ++){
arr[i][j] = j+1
}
}
console.log(arr)
⬇
更清晰的对比
-------------- vs -----------------