Les*_*leh 8 javascript ecmascript-6
在ES6生成器中使用新ES5阵列功能的正确方法是什么?我是否必须先将iterable显式转换为数组,还是有更好的方法?例如:
function* range(low, high) {
var i = low;
while(i < high)
yield i++;
}
// Sum of numbers in range, doesn't work
console.log(range(0, 10).reduce((x,y) => x + y));
Run Code Online (Sandbox Code Playgroud)
生成器函数返回Iterator对象.Iterator API不包含更高阶的Array方法,例如map,reduce等等,因此您需要构建一个中间数组(或使用类似wu.js的库).
您可以使用spread运算符从(有限)迭代器中简明地构建一个数组:
var sum = [...range(0, 10)].reduce((e, i) => e + i)
Run Code Online (Sandbox Code Playgroud)
小智 5
使用Array.from以下方法构建阵列
console.log(Array.from(range(0, 10)).reduce((x,y) => x + y));
Run Code Online (Sandbox Code Playgroud)
Array.from从iterable创建一个数组.请参阅https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/from.
如果你想在不创建数组的情况下进行reduce,那么你最终需要做类似的事情:
var sum = 0;
for (e of range(0, 10)) sum += e;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1356 次 |
| 最近记录: |