javascript - 生成器理解与数组理解

标签 javascript

在 JavaScript 中,

如何理解使用上的差异

myList = (for (i of [ 1, 2, 3 ]) i*i );

myList = [for (i of [ 1, 2, 3 ]) i*i ];

生成器理解数组理解有何不同?

何时使用什么?

最佳答案

根据 MDN,Generator Comprehensions (和 Array Comprehensions )是 EcmaScript 2016 标准的一部分,该标准仍在开发中。所以你在野外还不会经常遇到它们。目前仅在 Firefox 中实现。

生成器(推导式)

主要区别在于生成器理解返回一个生成器:

> myList = (for (i of [ 1, 2, 3 ]) i*i );
> Generator {  }

它(也是)具有 .next() 方法的迭代器:

> myList.next();
> Object { value: 1, done: false }

因此,如果您需要按顺序获取数据(例如在 for-of 循环中)或者想要将数据传回,生成器可能会很有用到生成器来更改以下 yield 的结果(例如myList.next(2);)。

Kyle Simpson provides a good introduction to generators .

数组推导式

另一方面,数组理解直接返回一个数组:

> myList = [for (i of [ 1, 2, 3 ]) i*i ];
> Array [ 1, 4, 9 ]

您也可以使用生成器理解获得相同的结果 Spread Operator ...:

> myList = [...(for (i of [ 1, 2, 3 ]) i*i )];
> Array [ 1, 4, 9 ]

关于javascript - 生成器理解与数组理解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32494990/

相关文章:

javascript - 隐藏然后专注于下面的选择元素

javascript - 为什么将 $(this) 分配给 var

javascript - 设置操作系统特定的键绑定(bind) - Mac 上为 Cmd,其他设备上为 Ctrl

javascript - 我如何确保全局范围 JS 范围(窗口)保持干净?

javascript - 永远在最前面的标题

javascript - Ionic 将视频上传到 S3

javascript - 图像的 Angular 循环

javascript - Jquery:帮助从数据属性中获取值

javascript - 将动态键值对传递给函数

javascript - 类型错误 : Cannot read properties of undefined in Vue