本文介绍了调用[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]()时不生成对象
发布评论