gpt4 book ai didi

javascript - 产生对象值的 `Symbol.iterator`

转载 作者:行者123 更新时间:2023-11-30 14:45:06 27 4
gpt4 key购买 nike

这是我写的

myObj = {
x: 1,
y: 2,
z: 3,
};

myObj[Symbol.iterator] = function* () {
for (let val of Object.values(this))
yield val;
};

for(let x of myObj)
console.log(x); // 1,2,3

这有效,但对我来说看起来不必要的冗长。有没有更直接的表达方式?基本上,我正在寻找的是一个简单的表达式,它表示“这个对象的迭代器是它的值迭代器”。我试过了

myObj[Symbol.iterator] = function () {
return Object.values(this)[Symbol.iterator]
}

这没用。

最佳答案

Object.values(this)[Symbol.iterator] 是一个返回迭代器的函数。您应该返回调用它的结果(迭代器),而不是返回函数:

const myObj = {
x: 1,
y: 2,
z: 3,
};

myObj[Symbol.iterator] = () => Object.values(myObj)[Symbol.iterator]();

for (const x of myObj)
console.log(x); // 1,2,3

您还可以创建一个单独的函数,它适用于任何对象:

const myObj = {
x: 1,
y: 2,
z: 3,
};

const iterator = function() {
return Object.values(this)[Symbol.iterator]();
};

myObj[Symbol.iterator] = iterator;

for (const x of myObj)
console.log(x); // 1,2,3

关于javascript - 产生对象值的 `Symbol.iterator`,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49066376/

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