2017-09-23 30 views
0

我不知道爲什麼我看到下面的分配:如何將單個元素多維數組(JavaScript)的

const sideLength = 4; 
const multiArray = new Array(sideLength).fill(new Array(sideLength)); 
console.log(multiArray) 
var counter = 1; 
multiArray[3][1] = counter; 
console.log('multiArray:', multiArray) 

控制檯輸出:

[ [ , , , ], [ , , , ], [ , , , ], [ , , , ] ] 
multiArray: [ [ , 1, , ], [ , 1, , ], [ , 1, , ], [ , 1, , ] ] 

我本來期望輸出的第二行是:

multiArray: [ [ , , , ], [ , , , ], [ , , , ], [ , 1, , ] ] 

這是爲什麼1被添加到每一個陣列的索引= 1個元件?

回答

6

fill()方法使用靜態值填充從開始索引到結束索引的數組的所有元素。

這意味着所有元素都會引用相同的數組。改變一個元素的值,因爲它們指向同一個靜態對象

+0

Array會改變所有元素的值感謝您的解釋,@ marvel308。你能幫我理解爲什麼上面例子中的第一個console.log(multiArray)也記錄了更新後的數組值: – vnt

+0

它不會看看https://ideone.com/7wTtgJ – marvel308

+0

謝謝@ marvel308。控制檯開發工具肯定有問題:)。 https://image.prntscr.com/image/a6vTGz-CQWq40RFl8pbfdQ.jpg – vnt

2

您可以使用Array.from()創建具有特定.length

const sideLength = 4; 
 
const multiArray = Array.from({length:sideLength},() => new Array(sideLength)); 
 
console.log(multiArray) 
 
var counter = 1; 
 
multiArray[3][1] = counter; 
 
console.log('multiArray:', multiArray)

相關問題