先介紹一下坑
fill()方法都知道,填充數組
比如:
let a = new Array(5).fill(0); console.log(a); // 輸出結果為[0, 0, 0, 0, 0]
當我們想使用fill創建一個二維數組時
let arr=new Array(5).fill(new Array(5).fill(0)) console.log(arr)
輸出
看似沒有什么問題,當我給某個元素重新賦值
arr[1][1]=1
console.log(arr)
輸出
我只想給arr[1][1]賦值,但是每一個第一維數組的下標為1的元素的值全部改變了,這不是我們想要的。
原因
fill()的參數不是基本類型時,比如數組、對象,並不是將它的值填充到數組,而是將它的地址填充到數組,所以填充后數組的每一項都指向的是同一個對象,就會出現"牽一發而動全身"的現象。
解決方法
1.老老實實的遍歷,不聊
2.使用map()給每個第一維的數組分別賦值,不懂map()點這里
let arr=new Array(5).fill(0).map(item=>new Array(5).fill(0)) arr[1][1]=1 console.log(arr)
輸出
這樣就只有arr[1][1]發生改變了,完美解決。
原文鏈接:https://www.cnblogs.com/hmswt/p/14385957.html