2014-04-16 367 views
1

我有以下對象內的數組:訪問對象的JavaScript

myObject: { 

myArray1: [1,2,3], 
myArray2: [4,5,6], 
myArray3: [7,8,9] 
} 

這是保持在陣列生長的對象(動態數組?)。所以我需要找出一種方法來訪問它。我遇到了使用類似這樣的東西(var key在myObject中):

for (var key in myObject) { 
    var obj = myObject[key]; 
     for (var prop in obj) { 
      //thinking that this will print the first value of the array 
     console.log(prop[0]); 
    } 
    } 

但它不起作用它打印未定義。我知道使用for不是正確訪問對象的方式。我想知道是否有人可以建議通過循環訪問此對象的值的方法。

謝謝!

+1

可能重複http://stackoverflow.com/questions/11922383/access-process-nested-objects-arrays- or-json) –

+0

爲什麼你認爲'for ... in'對於對象的作用與對數組的作用不同? –

+0

@FelixKling這非常有趣。我認爲這是不被推薦的。我不記得我在哪裏讀過它。 – mauricioSanchez

回答

1

迭代的對象與for..in是好的,但不是一個數組。因爲當你用數組起訴for..in時,它不會獲得數組值,而是數組索引。所以,你應該這樣做

for (var key in myObject) { 
    var currentArray = myObject[key]; 
    for(var i = 0; i < currentArray.length; i += 1) { 
     console.log(currentArray[i]); 
    } 
} 
+0

這工作。我想這是正確的做法嗎? – mauricioSanchez

+0

@MauricioSanchez事實上,這就是數組必須迭代(或'Array.forEach')的方式。 *從不*與陣列使用'for..in'。 – thefourtheye

+0

雖然vivek_nk建議的方法,但它也起作用。我想這是一個更好的編碼實踐的問題? – mauricioSanchez

1

你在第二循環中犯了一個錯誤。 obj與陣列和支柱是索引

for (var key in myObject) { 
    var obj = myObject[key]; 
    for (var prop in obj) { 
     //this will print the first value of the array 
    console.log(obj[prop]); //obj is the array and prop is the index 
} 
} 
+0

這也很有趣! – mauricioSanchez

1

prop是數組,其不是數組的索引。 obj是數組。因此,它應該是:

console.log(obj[prop]); 
[訪問/處理(嵌套的)對象,數組或JSON(的