调用[Symbol.iterator]()时不生成对象 [英] Object is not being produced on calling [Symbol.iterator]()

查看:379
本文介绍了调用[Symbol.iterator]()时不生成对象的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是源代码:

const james = {
    name: 'James',
    height: `5'10"`,
    weight: 185,
    [Symbol.iterator]:function*(){
    yield Object.keys(this) ;   
    }
};
const iterator = james[Symbol.iterator]();
//
console.log(iterator.next().value); // 'James'
console.log(iterator.next().value); // `5'10`
console.log(iterator.next().value); // 185

第一次调用 iterator.next()。value 应该是打印

{"value":"James","key":"name","done":false}

但它正在打印 {value:[name,height ,weight],done:false} 。如何解决这个问题?

but it is printing {"value":["name","height","weight"],"done":false}. How to resolve this?

推荐答案

产生一次性所有密钥。意味着您的第一个 next 完成所有工作。您所需要的只是迭代密钥和 yield seq中的它们uns。

You yield all keys at once. Means that your first next do all work. All you need is to iterate over the keys and yield them in sequence.

const james = {
    name: 'James',
    height: `5'10"`,
    weight: 185,
    [Symbol.iterator]:function*(){   
       for(let key of Object.keys(this)) {
          yield  { propValue: this[key], propName: key};       
       }       
    }
};

const iterator = james[Symbol.iterator]();

console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());

这篇关于调用[Symbol.iterator]()时不生成对象的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

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