产生对象值的`Symbol.iterator`

乔治

我写了这个

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]
}

这没有用。

MichałPerłakowski

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Iterator <T>返回对象

对象键如何为Symbol.iterator类型

如何实现Symbol.iterator?

Symbol.iterator不是函数

打字稿Symbol.iterator

为什么 Sets 的 keys() 值不等于 Symbol.iterator,而 kyes 值等于 Symbol.iterator

ES 6:Symbol.iterator和@@ iterator之间的区别

反应-使用挂钩时,出现错误-对象不可迭代(无法读取属性Symbol(Symbol.iterator))

更新状态 | 对象不可迭代(无法读取属性 Symbol(Symbol.iterator))

Firebase函数故障:(未定义)对象不可迭代(无法读取属性Symbol(Symbol.iterator))

传播可迭代的... obj [Symbol.iterator](...)

访问超类 Symbol.iterator

如何调用对myArray的引用[Symbol.iterator]

如何从孩子的Symbol.iterator中调用父类的Symbol.iterator

类型“对象”必须具有返回迭代器的“ Symbol.iterator”方法

遍历类型为Iterator <T>的对象

LinkedList.iterator()返回什么对象?

从Iterator返回的对象中的可变引用

如何在Iterator <object>中存储对象?

使用<s:iterator>标签附加静态值

无法读取未定义的属性“ Symbol(Symbol.iterator)”

Scala:List.iterator产生空的迭代器

通过Symbol.iterator进行迭代不会发生

babel obj symbol.iterator未定义

HTMLCollections可以用...(of)(Symbol.iterator)进行迭代吗?

typedef [Symbol.iterator] 的正确方法是什么?

为什么通过括号访问Symbol.iterator?

如何使用symbol.iterator在javascript中使链表可迭代

path [Symbol.iterator]不是函数(postcss插件)