2011-10-19 76 views
3

我有以下對象:

var objectVar = { 
    4 : { "key" : "key-name4", "item4" : {} }, 
    3 : { "key" : "key-name3", "item3" : {} } 
} 

然後我嘗試以下方法:

$(objectVar).each(function(index,record){ 
    console.log(record); // Loops Only Once and Logs Full Object 
}); 

誰能幫我爲什麼$。每();函數通過主對象內的子對象進行迭代?

任何幫助,將不勝感激!正確

$.each(objectVar, function(index, record) { 
    console.log(record); 
}); 

回答

8

「任何人都可以幫我爲什麼$ .each();功能研究所主要對象的內部,從子對象迭代?」

要循環的子對象,則需要子循環。

當使用each()[docs]方法像你這樣會通常工作有時 (因爲它是目前),那就真的意味着DOM元素

而是使用jQuery.each()[docs]方法:

$.each(objectVar, function(index,record){ 
    console.log(record); 

     // start a loop on the current record in the iteration 
    $.each(record, function(index2, sub_record) { 
     console.log(index2, sub_record); 
    }); 
}); 

現在,您的循環將擴展到嵌套對象的第一級。

如果您不確定整體結構,並且想要枚舉整個深度,則需要測試每個遇到的值以查看它是否應該枚舉。

+0

謝謝你的好解釋!我知道它在OP的範圍之外,但是你知道是否有辦法讓每個()函數按照編號鍵的順序解析,而不是記錄出現在對象內部的順序嗎? – dSquared

+1

@dSquared:不,實際上沒有辦法用對象來做到這一點。唯一的方法是定義一個描述所需順序的數組,然後迭代數組,並從對象中獲取相關項目。因此,如果你的對象有鍵'7,3,9,4',你可以創建一個數組'arr = [3,4,7,9]'來定義順序,然後迭代該數組,並執行'objectVar [arr [i]]。但是那會變得有點複雜。 – user113716

+0

...爲了獲得數字鍵的順序排序,您應該首先使用數組。 – user113716

3
$.each(objectVar,function(index,record){ 
    console.log(record); 

}); 
1

您使用$.each()非jQuery的對象:

2

雖然jQuery很棒,但你真的沒有使用它。通過對象循環的JavaScript相當簡單:

var record; 
for(var key in objectVar) { 
    record = objectVar[key]; 
}