javascript - 如何循环或枚举 JavaScript 对象?

标签 javascript loops for-loop each

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

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

如何循环遍历 p 的所有元素(p1p2p3.. .) 并获取它们的键和值?

最佳答案

您可以使用for-in如其他人所示循环。但是,您还必须确保您获得的 key 是对象的实际属性,而不是来自原型(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 ,如果不使用,它将在命名属性上返回未定义,并且 Object.keys()确保仅使用对象自己的属性,而不使用整个原型(prototype)链属性

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

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

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

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

关于javascript - 如何循环或枚举 JavaScript 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32103828/

相关文章:

javascript - 点击推文引用内容

python - 在500 HTTP服务器错误后重试,从文件中使用的最后一行继续

scala - 如何在Scala中调用n次方法?

linux - 复制包含单词但不包含其他单词的文件。/grep 不使用 for 循环

python - 将两个列表中的单个项目添加到新列表中

javascript - 使用 NodeJS 和 Sequelize 进行控制流

javascript - {{#each objects}} 对比 {{#each model.objects}} 对比 {{#each content.objects}}

javascript - 使用 KnockoutJS 进行渐进式增强

java - 用 Java 中的循环替换代码中的语句

ios - 通过 for 循环编辑 NSString - iOS