2011-10-19 26 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]; 
}