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

IT技术 javascript prototypejs
2021-03-05 13:02:56

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

情况是这样的:我收到一个 JSON 格式的 AJAX 响应,如下所示:

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

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

Prototype 两者都有Object.keys()Object.values()但奇怪的是似乎没有简单的Object.each()功能!我可以获取 Object.keys() 和 Object.values() 的结果,并在我遍历一个时交叉引用另一个,但这是一种技巧,我相信有一种正确的方法可以做到!

3个回答

这里不需要 Prototype:JavaScript 有for..in循环。如果您不确定没有人与Object.prototype,也检查一下hasOwnProperty(),即

for(var prop in obj) {
    if(obj.hasOwnProperty(prop))
        doSomethingWith(obj[prop]);
}
这不是正确的答案。问题指出必须使用原型!自由选择——哈哈……
2021-04-21 13:02:56
你写的 Javascript 越多,你就越讨厌写for循环 :)
2021-04-24 13:02:56
不幸的是,如果您在 Google 上搜索诸如“如何迭代每个对象属性 javascript”之类的内容,那么这个问题会以 #1 的形式出现,因此很多来到这里的人确实可能正在寻找这个问题的答案。他们想要的问题是这个:stackoverflow.com/questions/921789/...,这真的与对象字面量无关。
2021-04-24 13:02:56
感谢您在不强迫我们加载不需要的库的情况下提供实际答案。
2021-05-01 13:02:56
这个问题的原始标题提到了原型,为了清楚起见,我重新添加了它。这个问题,正如正文的第一行所证明的那样,专门询问使用 Prototype 的环境。
2021-05-21 13:02:56

您必须首先将对象文字转换为 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);
});
不幸的是,由于类似的问题已关闭,只是想在没有 Prototype 的情况下迭代一个简单的 javascript 对象,我现在必须将此答案视为与由于“重复”而关闭的问题相同。所以,这是一个可怕的例子,因为它迫使用户加载 Prototype。用户没有说任何关于 Prototype 的事情,所以强迫他们加载不需要的库是没有用的。(请记住,将此视为真的重复)。如果另一个问题由于重复的虚假声明而没有结束,我将不必对答案投反对票。
2021-04-22 13:02:56
完美的!这正是我正在寻找的。
2021-05-06 13:02:56
提问者没有提到他们想要原型(或者问题是否被编辑?)?总之一切都很好
2021-05-11 13:02:56
无需加载外部库
2021-05-11 13:02:56

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

请参阅:如何枚举 javascript 对象的属性?

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

@OverloadUT:你没有足够仔细地阅读:不鼓励迭代数组的属性,而不是普通对象
2021-04-28 13:02:56
在 Prototype 文档中强烈反对这种方法:prototypejs.org/api/array
2021-05-02 13:02:56
另外,我不认为这是重复的,因为我正在寻找一个 Prototype-native 解决方案,这就是我得到的。另一个问题对于不希望它使用框架的人来说是不错的,但是如果您使用 Prototype,这个解决方案要安全得多。
2021-05-04 13:02:56