gpt4 book ai didi

javascript - 符号.迭代器: get all the object's properties in iterator object

转载 作者:行者123 更新时间:2023-11-28 17:52:46 25 4
gpt4 key购买 nike

我目前正在阅读有关 Symbols and Iterators 的内容(ES6 功能),在遇到一个示例后,我尝试使对象可迭代,以便我可以使用 for...of 功能。从这里的几个例子/答案/我检查的文章来看,普通情况下它看起来像这样:

let obj = {
prop1: 5,
prop2: 'test',
prop3: new Date(),
[Symbol.iterator]: () => ({
items: obj.items,
next: function next() {
return {
done: this.items.length === 0,
value: this.items.shift()
}
}
})
};
Object.defineProperty(obj, "items", {
enumerable: false,
get: function() {
let props = [];
for(let prop in this) if(this.hasOwnProperty(prop)) props.push(this[prop]);
return props;
}
});
for(let prop of obj) console.log(prop);

但我发现手动列出迭代器的 items 数组中对象属性的所有值很烦人。 Object.defineProperty 也让人感觉又脏又乱。我有点想汤姆扩展 link 中的示例。是否有一种更智能/更简单的方法来获取迭代器内的所有对象属性(而不是 items: obj.items 和相关的膨胀或手动列出诸如 items: [5, 'test',新日期()])?

最佳答案

您可以在符号迭代器中返回一个生成器:

[Symbol.iterator]:function*(){
for(value of Object.values(this)){
yield value;//may extend this to your needs
}
}

或者根据您的情况:

[Symbol.iterator]:function*(){
var i=1;
while(this["prop"+i]){
yield this["prop"+i];//may extend this to your needs
i++;
}
}

http://jsbin.com/zekunalusi/edit?console

关于javascript - 符号.迭代器: get all the object's properties in iterator object,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45102299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com