首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在es6中遍历对象

在es6中遍历对象
EN

Stack Overflow用户
提问于 2016-12-16 17:45:04
回答 1查看 33K关注 0票数 16

这对我来说很好:

代码语言:javascript
复制
const iterable = [1, 2, 3];

for (const value of iterable) {
    console.log(value);
}

但是,这不起作用:

代码语言:javascript
复制
const iterable = {1:10, 2:20, 3:30};

for (const value of iterable) {
    console.log(value);
    console.log(iterable[value]);
}

而不是给我这个错误:

代码语言:javascript
复制
Uncaught TypeError: iterable[Symbol.iterator] is not a function(…)

我该怎么做呢?

这就是我现在要做的:

代码语言:javascript
复制
for(const value in iterable){
    if (iterable.hasOwnProperty(value)) {
        console.log(value);
        console.log(iterable[value]);
    }
}
EN

回答 1

Stack Overflow用户

发布于 2016-12-16 18:12:53

for..of仅适用于iterable objects。你可以像这样实现一个迭代器:

代码语言:javascript
复制
const iterable = {
  [Symbol.iterator]() {
    return {
      i: 1,
      next() {
        if (this.i <= 3) {
          return { value: 10 * this.i++, done: false };
        }
        return { value: undefined, done: true };
      }
    };
  }
};

for (const value of iterable2) {
    console.log(value);
} // 10, 20, 30

要迭代普通对象,而不是我认为很好的for...in,您可以使用Object.keys

代码语言:javascript
复制
const iterable = {1:10, 2:20, 3:30};
Object.keys( iterable ).forEach( key => {
    console.log( iterable[key] );
});  // 10, 20, 30

顺便说一下,你的第一个例子抛出了一个语法错误,也许你的意思是const iterable = [1,2,3]?那么它将会工作,因为数组是可迭代的对象。

票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41181393

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档