Допустим, у меня есть итератор:
function* someIterator () {
yield 1;
yield 2;
yield 3;
}
let iter = someIterator();
... который я смотрю на следующий элемент, который будет повторяться:
let next = iter.next(); // {value: 1, done: false}
... и затем я использую итератор в al oop:
for(let i of iterator)
console.log(i);
// 2
// 3
l oop не будет включать в себя элемент, который просматривали. sh Чтобы увидеть следующий элемент, не вынимая его из ряда итераций.
Другими словами, я буду sh реализовать:
let next = peek(iter); // {value: 1, done: false}, or alternatively just 1
for(let i of iterator)
console.log(i);
// 1
// 2
// 3
... и я не хочу делать это без изменения кода для итерируемой функции.
То, что я попробовал, есть в моем ответе. Это работает (вот почему я сделал это ответом), но я волнуюсь, что он создает объект, который является более сложным, чем он должен быть. И я беспокоюсь, что это не сработает в тех случаях, когда «готовый» объект отличается от { value = undefined, done = true }
. Так что любые улучшенные ответы очень приветствуются.