Сократить последовательность элементов, предоставляемых генератором в JavaScript - PullRequest
0 голосов
/ 23 ноября 2018

Скажем, у меня есть последовательность элементов, и я хочу выполнить операцию уменьшения с помощью функции myReducer (что бы это ни было).Если мои элементы находятся в массиве (скажем, myArray), это легко:

myArray.reduce(myReducer);

Что если, однако, моя последовательность довольно велика, и я не хочу выделять массив из всего этогоТолько для того, чтобы сразу же уменьшить предмет за товаром?Я могу создать функцию генератора для моей последовательности, эта часть ясна.Есть ли простой способ, как затем выполнить сокращение?Я имею в виду, помимо написания самой функции уменьшения для генератора.

1 Ответ

0 голосов
/ 23 ноября 2018

На данный момент стандарт ECMA-Script предоставляет такие функции, как reduce для массивов, так что вам не повезло: вам нужно реализовать собственные 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)
...