使用Prototype在javascript中迭代对象的每个属性?

时间:2009-02-25 21:15:43

标签: javascript prototypejs

有没有办法使用Prototype JavaScript框架迭代对象的每个属性?

情况就是这样:我在JSON中获得了一个类似于这样的AJAX响应:

{foo: 1, bar: 2, barobj: {75: true, 76: false, 85: true}}

如果我将json响应评估为变量response,我希望能够遍历response.barobj对象中的每个属性,以查看哪些索引为true,哪些索引为false。

Prototype同时具有Object.keys()Object.values(),但奇怪的是似乎没有简单的Object.each()函数!当我迭代一个时,我可以获取Object.keys()和Object.values()的结果并交叉引用另一个,但这是一个黑客,我相信有一个正确的方法来做到这一点!

3 个答案:

答案 0 :(得分:550)

这里不需要Prototype:JavaScript有for..in个循环。如果您不确定没有人与Object.prototype混淆,请同时检查hasOwnProperty(),即

for(var prop in obj) {
    if(obj.hasOwnProperty(prop))
        doSomethingWith(obj[prop]);
}

答案 1 :(得分:42)

您必须先convert your object literal to a Prototype Hash

// Store your object literal
var obj = {foo: 1, bar: 2, barobj: {75: true, 76: false, 85: true}}

// Iterate like so.  The $H() construct creates a prototype-extended Hash.
$H(obj).each(function(pair){
  alert(pair.key);
  alert(pair.value);
});

答案 2 :(得分:0)

您应该遍历键并使用方括号获取值。

请参阅:How do I enumerate the properties of a javascript object?

编辑:显然,这会使问题重复。