如何循环或枚举 JavaScript 对象? [英] How do I loop through or enumerate a JavaScript object?

查看:20
本文介绍了如何循环或枚举 JavaScript 对象?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有一个如下所示的 JavaScript 对象:

I have a JavaScript object like the following:

var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

现在我想遍历所有 p 元素(p1p2p3...)并获取它们的键和值.我该怎么做?

Now I want to loop through all p elements (p1, p2, p3...) And get their keys and values. How can I do that?

如有必要,我可以修改 JavaScript 对象.我的最终目标是遍历一些键值对,如果可能,我想避免使用 eval.

I can modify the JavaScript object if necessary. My ultimate goal is to loop through some key value pairs and if possible I want to avoid using eval.

推荐答案

您可以使用 for-in 循环,如其他人所示.但是,您还必须确保获得的密钥是对象的实际属性,而不是来自原型.

You can use the for-in loop as shown by others. However, you also have to make sure that the key you get is an actual property of an object, and doesn't come from the prototype.

这是片段:

var p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

for (var key in p) {
    if (p.hasOwnProperty(key)) {
        console.log(key + " -> " + p[key]);
    }
}

For-of 与 Object.keys() 替代:

var p = {
    0: "value1",
    "b": "value2",
    key: "value3"
};

for (var key of Object.keys(p)) {
    console.log(key + " -> " + p[key])
}

注意使用 for-of 而不是 for-in,如果不使用它将在命名属性上返回 undefined,并且 Object.keys() 确保只使用对象自己的属性而不使用整个原型-链属性

Notice the use of for-of instead of for-in, if not used it will return undefined on named properties, and Object.keys() ensures the use of only the object's own properties without the whole prototype-chain properties

使用新的Object.entries() 方法:

注意: Internet Explorer 本身不支持此方法.您可以考虑为旧版浏览器使用 Polyfill.

Note: This method is not supported natively by Internet Explorer. You may consider using a Polyfill for older browsers.

const p = {
    "p1": "value1",
    "p2": "value2",
    "p3": "value3"
};

for (let [key, value] of Object.entries(p)) {
  console.log(`${key}: ${value}`);
}

这篇关于如何循环或枚举 JavaScript 对象?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆