首頁 >web前端 >js教程 >為什麼 JavaScript 的 `Array.fill()` 會建立參考而不是副本,我該如何修復它?

為什麼 JavaScript 的 `Array.fill()` 會建立參考而不是副本,我該如何修復它?

Linda Hamilton
Linda Hamilton原創
2024-11-30 09:50:15237瀏覽

Why Does JavaScript's `Array.fill()` Create References Instead of Copies, and How Can I Fix It?

JavaScript 中的Array.fill():引用與值的警示故事

Array.fill() 是一種使用的JavaScript方法用指定值填滿數組。但是,重要的是要了解 Array.fill() 對引用而不是值進行操作。

問題:引用與值

考慮以下程式碼:

let m = Array(6).fill(Array(12).fill(0));

m[0][0] = 1;
console.log(m[1][0]); // Outputs 1 instead of 0

這裡,我們使用 Array.fill() 建立一個 6x12 矩陣。然而,當我們將 m0 設定為 1 時,m1 意外地也變成 1。這是因為 Array.fill() 所建立的內部陣列都引用同一個 Array 物件。

預期行為:值

我們可能不想引用,而是複製值。換句話說,更改 m0 不應影響 m1。

解:使用Array.from()

強制Array.fill() 複製值而不是引用,我們可以使用Array.from() 如下:

let m = Array.from({length: 6}, e => Array(12).fill(0));

m[0][0] = 1;
console.log(m[1][0]); // Outputs 0 as expected

Array.from()確保每個內部數組都是不同的

結論

使用 Array.fill() 時,請注意引用和值之間的區別。對於您想要複製值而不是引用的情況,請考慮使用 Array.from() 來代替。

以上是為什麼 JavaScript 的 `Array.fill()` 會建立參考而不是副本,我該如何修復它?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn