2014-02-10 24 views
0

我知道網上有很多關於這個問題的答案,但我仍然無法使它工作。如何使用Ext.iterate(或JS)迭代對象數組?

在JSON POST回調後,我檢索一個Object對象。 在瀏覽器的控制檯日誌,該陣列是這樣的:

[Object, Object, Object, Object, Object, Object, Object, Object, Object, Object] 

每個對象的內部,其中,有這樣的東西:

id4blob: "1084" 

所以我假設數組可能是這樣的(正確我,如果我錯了):

[{id4blob: "1084"},{id4blob: "2008"}, [...]] 

數組存儲在一個名爲stationsParse

變量

我想遍歷這些值,我發現

Ext.iterate 

所以我這樣做:

Ext.iterate(stationsParse, function(key, value) { 
    console.log(key + value); 
}); 

,然後嘗試這個(這似乎是喲相同的,但在純JS)

for (key in stationsParse) { 
    var value = stationsParse[key]; 
    console.log(key + value); 
} 

但是沒有工作,我的控制檯沒有顯示任何內容。 不過,這個功能很好觸發,我可以看到它的Chrome控制檯,但for被忽略。

我在做什麼錯? 這是迭代對象數組的正確方法嗎?

回答

2

如果你想使用vanilla JS來遍歷一個數組,一個簡單的for循環就可以做到這一點。使用點符號訪問每個對象的id4blob屬性的值。

for (var i = 0, l = arr.length; i < l; i++) { 
    console.log(arr[i].id4blob) 
} 

for...in循環通常保留用於循環對象的屬性。

Demo

+0

感謝它的工作! –

+0

@Andy鏈接已死。 – Nabin

5

嘗試是這樣的:

var stationsParse = [{id: 1, someproperty: 2}, {id: 2, someproperty: 101}]; 

Ext.each(stationsParse, function(ob){ 
    Ext.Object.each(ob, function(property, value){ 
    console.log(property, value); 
    }); 
}); 

這裏我使用Ext.each遍歷stationsParse陣列中的每個元素。該數組中的每個元素都是一個對象。要遍歷對象中的每個屬性,我使用Ext.Object.each。 「每個」函數都將您想要迭代的變量作爲其第一個參數,並將函數作爲其第二個參數。該函數將在對象的數組/屬性的每個元素上運行。

+0

對於數組和對象,您還可以使用'Ext.iterate(object,fn,[scope])':如果給定的值是可迭代的,則方法委託給Ext.Array.each,否則委託Ext.Object.each。 [Doc here](http://docs-origin.sencha.com/extjs/4.0.7/#!/api/Ext-method-iterate) – zerologiko

0

我是能夠使這項工作:

for (var i in family) { 
    console.log(family[i]["name"]); 
} 

在本教程Codecademy,其中family是對象的數組。

我能看到的唯一區別是我的迭代器變量i前面的var