Как я могу потреблять многократные партии (куски одинакового размера)? - PullRequest
0 голосов
/ 25 января 2019

Я часто использую batch() в Python.Есть ли какая-то альтернатива в JavaScript, начиная с ES6, которая имеет итераторы и функции генератора?

1 Ответ

0 голосов
/ 25 января 2019

Я должен был написать один для себя, которым я делюсь здесь для меня и других, чтобы найти здесь легко:

// subsequently yield iterators of given `size`
// these have to be fully consumed
function* batches(iterable, size) {
  const it = iterable[Symbol.iterator]();
  while (true) {
    // this is for the case when batch ends at the end of iterable
    // (we don't want to yield empty batch)
    let {value, done} = it.next();
    if (done) return value;

    yield function*() {
      yield value;
      for (let curr = 1; curr < size; curr++) {
        ({value, done} = it.next());
        if (done) return;

        yield value;
      }
    }();
    if (done) return value;
  }
}

Это дает генераторы, а не Array с, например. Вы должны полностью потреблять каждую партию перед повторным вызовом next().

...