2016-05-23 44 views
-4

定義當試圖推動項目到一個數組JavaScript中它給出了一個錯誤,下面的僞代碼說明發生了什麼:陣列[關鍵] .push未在JavaScript

var data = new Array(); 
for(...) { 
    data[key].push(item[i]); 
} 

它顯示以下錯誤:

Cannot read property 'push' of undefined 

由於

+5

因爲'data'是數組。除非'data [key]'持有一個數組,否則你會得到未定義的。考慮'var data = [1,2,3,4,5];'和'key'是第一個索引(1)。你試圖在一個整數上使用數組方法,這顯然無法工作。 –

+0

@SterlingArcher給了你答案。 –

+1

您可以從教程和文檔中瞭解有關數組的基礎知識:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array,http://eloquentjavascript.net/04_data.html 。 *也許*你想'data [key] = item [i]'。 –

回答

0

如果需要的2D陣列,則必須初始化外數組的每個元素是一個數組。

// Have to check every array item, if it's not an array already, make it so 
for(...) { 
    if (!data[key]) { 
     data[key] = []; 
    } 
    data[key].push(item[i]); 
} 

你總是可以做以下的,如果你知道內部陣列的數量,您需要:

var data = [[],[],[],[],[],[]]; 

在你的榜樣,因爲他們的變量名是關鍵,我假設你真正想要的數組的對象。如果您提前知道密鑰,則可以使用以下文字。

var data = { 
    myKey1: [], 
    myKey2: [] 
} 
+0

您定義了一個數據[key]數組,假設您知道密鑰,但在我的情況下,密鑰是在運行時定義的,位於for循環中 –

+0

但我不知道前面的密鑰,我不知道其中很多我需要,這是我的問題,我需要尋找一種動態的方式來定義二維數組, 謝謝, –

+0

然後第一段代碼是你在找什麼 –