避坑!js正確地使用fill()初始化二維數組


先介紹一下坑

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM