2014-06-06 249 views
1

首先我很抱歉,因爲這可能會非常簡單。但我在PHP中工作很多,但是這種語法在JS中不起作用。JS通過對象循環

我有下面的代碼片段:

var rangeArr = []; 

// This piece is inside an loop of adding elements... 
rangeArr[row_id] = {"row_x": row_x, "row_y": row_y, "row_name": row_name, "row_dir": row_dir, "row_length": row_length, "row_height": row_height}; 
     row_id++; 

我會得到這個對象實例(Chrome的控制檯獲得):

rangeArr 
[undefined × 1, 
Object 
    row_dir: "lr" 
    row_height: "6" 
    row_length: "5" 
    row_name: "" 
    row_x: 45 
    row_y: 71 
    __proto__: Object 
    , 
Object 
    row_dir: "lr" 
    row_height: "6" 
    row_length: "6" 
    row_name: "" 
    row_x: 95 
    row_y: 208 
    __proto__: Object 
] 

我用下面這段的代碼循環通過對象數組:

for (var item in rangeArr) { 
    if(typeof(item) !== 'undefined'){ 
     console.log(item.row_x); 
    } 
} 

但我只是得到未定義的錯誤...當我看着conso整個item只包含row_id。這意味着只有索引被檢索,而不是對象本身。正如我之前所說的,我對JS Objects的知識知之甚少,但我認爲這是做到這一點的正確方法。

那麼如何讓我的代碼工作,以便我可以在需要時接收數據?

回答

2

在你的for in循環中,item實際上是數組鍵,而不是數組元素的值。要獲取該對象,請使用rangeArr[item]

for (var item in rangeArr) { 
    var obj = rangeArr[item]; 
    if(typeof(obj) !== 'undefined'){ 
     console.log(obj.row_x); 
    } 
} 

也就是說,for in循環在數組上是一個壞主意。循環的基本增量,或forEach是首選。有關更多信息,請參閱this question


它看起來像你手動生成增量鍵。相反,您可能更喜歡使用Array.prototype.push()

​​
+0

謝謝,那確實有效。我在其他地方使用'row_id',所以推送不是一個選項。但是,謝謝你的消化,不知道JS也是可能的 – Mathlight