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

Ove*_*dUT 89 javascript prototypejs

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

情况就是这样:我在JSON中得到一个AJAX响应,如下所示:

{foo: 1, bar: 2, barobj: {75: true, 76: false, 85: true}}
Run Code Online (Sandbox Code Playgroud)

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

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

Chr*_*oph 552

这里没有Prototype:JavaScript有for..in循环.如果您不确定没有人搞砸了Object.prototype,请检查hasOwnProperty(),即

for(var prop in obj) {
    if(obj.hasOwnProperty(prop))
        doSomethingWith(obj[prop]);
}
Run Code Online (Sandbox Code Playgroud)

  • 感谢您的实际答案,而不是强迫我们加载不需要的库. (140认同)
  • 不幸的是,如果你谷歌像"如何迭代每个对象属性javascript"这样的话,这个问题就会出现#1,所以很多人来这里确实可能正在寻找这个问题的答案.他们想要的问题是:http://stackoverflow.com/questions/921789/how-to-loop-through-javascript-object-literal-with-objects-as-members,这与对象无关文字. (13认同)
  • +1这是问题标题的正确答案. (11认同)
  • 这不是严格的答案.问题说明必须使用原型!选择自由 - 哈哈...... (8认同)

Tri*_*ych 42

您必须先将对象文字转换为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);
});
Run Code Online (Sandbox Code Playgroud)

  • 不幸的是,由于一个类似的问题已经关闭,只是想在没有Prototype的情况下迭代一个简单的javascript对象,我现在必须将这个答案视为与由于"重复"而关闭的问题相同.所以,可怕的例子是因为它迫使用户加载Prototype.用户没有对Prototype说什么,所以强迫他们加载不需要的库是没用的.(记住,将其视为真的重复).如果由于错误的重复索赔而没有关闭另一个问题,我就不必投票给答案了. (57认同)
  • 提问者没有提到他们想要Prototype(或者是编辑过的问题吗?)?无论如何,这一切都很好 (2认同)