首页 > 解决方案 > 使普通对象可迭代。(javascript)

问题描述

因此,在介绍了 Marjin Heverbeke 的 eloquent javascript 的前七章之后,我正在开展一个个人项目。我正在创建学校数据处理系统。所以我已经制作了包含很多对象的数据结构,所以我创建了一个测试对象,以便我可以练习迭代协议,这就是我写的

let object = {a:'a',b:'b',c:'c',d:'d',e:'e'};
object[Symbol.iterator]=function(){
    let keys = Object.keys(this);
    let count=0;
return {
    next(){
        if(count>keys.length){
            return {value: null, done:true};
        }
        else{
            let value=this[keys[count]];
            count++;
            return {value, done:false};
        }
    }
}
}

但是当我这样做时

    for(let each of object){
       console.log([each]);
}

它输出

//Array[undefined]
//Array[undefined]
//Array[undefined]
//Array[undefined]
//Array[undefined]
//Array[undefined]
//Array[undefined]

我不知道出了什么问题,请帮忙。

标签: javascriptjavascript-objects

解决方案


尝试这个:

let object = {
  a: 'a',
  b: 'b',
  c: 'c',
  d: 'd',
  e: 'e',
};
object[Symbol.iterator] = function () {
  let keys = Object.keys(this);
  let count = 0;
  return {
    next() {
      if (count === keys.length) {
        return {
          value: null,
          done: true,
        };
      }
      let value = keys[count];
      count++;
      return {
        value,
        done: false,
      };
    },
  };
};

for (let each of object) {
  console.log([each]);
}

请注意错误是:let value=this[keys[count]];if (count > keys.length)


推荐阅读