gpt4 book ai didi

javascript - 如何查看 Javascript 迭代器中的下一个值

转载 作者:行者123 更新时间:2023-12-05 01:37:14 25 4
gpt4 key购买 nike

假设我有一个迭代器:

function* someIterator () {
yield 1;
yield 2;
yield 3;
}

let iter = someIterator();

...我查看下一个要迭代的元素:

let next = iter.next(); // {value: 1, done: false}

...然后我在循环中使用迭代器:

for(let i of iterator)
console.log(i);
// 2
// 3

循环将不包含所查看的元素。我希望在不将其从迭代系列中取出的情况下看到下一个元素。

换句话说,我希望实现:

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 } 不同的情况。因此,非常欢迎任何改进的答案。

最佳答案

我构建了一个调用 nextpeek 函数,而不是 peek 函数,从迭代器中删除元素,然后添加它通过创建一个可迭代函数返回,该函数首先产生捕获的元素,然后产生可迭代中的剩余项目。

function peeker(iterator) {
let peeked = iterator.next();
let rebuiltIterator = function*() {
if(peeked.done)
return;
yield peeked.value;
yield* iterator;
}
return { peeked, rebuiltIterator };
}

function* someIterator () { yield 1; yield 2; yield 3; }
let iter = someIterator();
let peeked = peeker(iter);

console.log(peeked.peeked);
for(let i of peeked.rebuiltIterator())
console.log(i);

关于javascript - 如何查看 Javascript 迭代器中的下一个值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61164230/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com