2017-01-15 22 views
1

的JavaScript:填入一數組在JavaScript

我試圖填充數組。

var blocks = []; 
var blocksCount = 7; 


for (var columnIndex = 0; columnIndex < blocksCount; columnIndex++) { 
    for (var rowIndex = 0; rowIndex < blocksCount; rowIndex++) { 

    blocks[columnIndex][rowIndex] = 'Some Value'; 

    } 
} 

錯誤消息說:undefined is not an object

我必須改變以使其工作?

+0

你在哪裏運行該代碼? Chrome和Node 6.9.1都報告'不能設置未定義的屬性'0'。 – Dancrumb

回答

2

blocks[columnIndex]在您爲其分配rowIndex時未定義。您無法將值分配給尚未定義的內容。因此,定義columnIndex爲空數組,當它尚未定義時,即第一次。你可以這樣做,

blocks[columnIndex] = blocks[columnIndex] || []; 

var blocks = []; 
 
var blocksCount = 7; 
 

 

 
for (var columnIndex = 0; columnIndex < blocksCount; columnIndex++) { 
 
blocks[columnIndex] = blocks[columnIndex] || []; 
 
    for (var rowIndex = 0; rowIndex < blocksCount; rowIndex++) { 
 
    
 
    blocks[columnIndex][rowIndex] = 'Some Value'; 
 

 
    } 
 
} 
 

 
console.log(blocks);

+0

什麼是「||」? – Timo

+0

它是一個「OR」運算符,它表示如果定義了「||」左側的值,那麼它將被分配給「blocks [columnIndex]」,或者它的值將是右側的值即'[]' – superUser

+0

好。謝謝 ! – Timo

3

在嘗試將值分配給該數組的屬性之前,您必須將數組分配給blocks[columnIndex]

+0

你能解釋爲什麼嗎? – Timo

+0

@Timo - 因爲你不能指定一個屬性爲'undefined' – Quentin

1

目前,你沒有一個多維數組。

var arr = []; 
console.log(arr[0]); 

將返回undefined並且您正試圖在此時分配新元素。

您可以在第一個for循環語句中創建一個多維數組,並在原始blocks數組內創建一個新數組。

blocks[columnIndex] = []; 

然後,您可以將這兩個值分配給多維數組。

var blocks = []; 
 
var blocksCount = 7; 
 
     
 
for (var columnIndex = 0; columnIndex < blocksCount; columnIndex++) { 
 
    blocks[columnIndex] = []; 
 

 
    for (var rowIndex = 0; rowIndex < blocksCount; rowIndex++) { 
 
    blocks[columnIndex][rowIndex] = 'Some Value'; 
 
    console.log(blocks[columnIndex][rowIndex]); 
 
    } 
 
}

https://jsfiddle.net/ybsdL4q7/

0

可以使用from構造的Array給函數傳遞到磁盤陣列。這意味着無需for循環:)

const blockCount = 7; 
 
const block = Array.from({ length: blockCount }, (_, i) => { 
 
    return Array.from({ length: blockCount }, (_, j) => 'Some Value'); 
 
}); 
 

 
console.log(block);