如何遍历 JavaScript 对象?

新手上路,请多包涵

我在 JavaScript 中有一个对象:

{
    abc: '...',
    bca: '...',
    zzz: '...',
    xxx: '...',
    ccc: '...',
    // ...
}

我想使用 for 循环来获取它的属性。而且我想分部分迭代它(不是一次所有对象属性)。

使用一个简单的数组,我可以使用标准 for 循环来做到这一点:

for (i = 0; i < 100; i++) { ... } // first part
for (i = 100; i < 300; i++) { ... } // second
for (i = 300; i < arr.length; i++) { ... } // last

但是如何处理对象呢?

原文由 nkuhta 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 793
2 个回答

要迭代 Arrays、Strings 或 Objects 的键,请使用 for .. in

 for (let key in yourobject) {
 console.log(key, yourobject[key]);
 }

使用 ES6,如果您同时需要键和值,请执行

for (let [key, value] of Object.entries(yourobject)) {
 console.log(key, value);
 }

要避免记录继承的属性,请检查 hasOwnProperty

 for (let key in yourobject) {
 if (yourobject.hasOwnProperty(key)) {
 console.log(key, yourobject[key]);
 }
 }

如果您使用的是简单对象(例如您自己使用 {} 制作的对象),则在迭代键时无需检查 hasOwnProperty

这个 MDN 文档 更一般地解释了如何处理对象及其属性。

如果你想“分块”做,最好是提取数组中的键。由于无法保证订单,因此这是正确的方法。在现代浏览器中,您可以使用

let keys = Object.keys(yourobject);

为了更加兼容,你最好这样做:

 let keys = [];
 for (let key in yourobject) {
 if (yourobject.hasOwnProperty(key)) keys.push(key);
 }

然后你可以通过索引迭代你的属性: yourobject[keys[i]]

 for (let i=300; i < keys.length && i < 600; i++) {
 console.log(keys[i], yourobject[keys[i]]);
 }

原文由 Denys Séguret 发布,翻译遵循 CC BY-SA 4.0 许可协议

这是现代浏览器的另一个迭代解决方案:

 Object.keys(obj)
  .filter((k, i) => i >= 100 && i < 300)
  .forEach(k => console.log(obj[k]));

或者没有过滤功能:

 Object.keys(obj).forEach((k, i) => {
    if (i >= 100 && i < 300) {
        console.log(obj[k]);
    }
});

但是,您必须考虑到 JavaScript 对象中的属性没有排序,即没有顺序。

原文由 VisioN 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题