减少JavaScript中生成器提供的项目序列

时间:2018-11-23 16:19:24

标签: javascript generator reduce

说我有一系列的项目,我想通过myReducer函数执行归约运算(无论它是什么)。如果我的商品位于数组中(例如myArray),那么很容易:

myArray.reduce(myReducer);

但是,如果我的序列很大,又不想分配所有数组,而只是立即逐个减少它怎么办?我可以为序列创建一个生成器函数,这一部分很清楚。有没有直接的方法可以执行还原操作?我的意思是除了自己为生成器编写reduce功能之外。

1 个答案:

答案 0 :(得分:1)

目前,ECMA脚本标准为数组提供了reduce之类的功能,因此您很不走运:您需要为 iterables 实现自己的reduce

const reduce = (f, i, it) => {
  let o = i

  for (let x of it)
    o = f (o, x)

  return o
}

const xs = [1, 2, 3]

const xs_ = {
  [Symbol.iterator]: function* () {
    yield 1
    yield 2
    yield 3
  }
}

const output1 = reduce ((o, x) => o + x, 10, xs)
const output2 = reduce ((o, x) => o + x, 10, xs_)

console.log ('output1:', output1)
console.log ('output2:', output2)