如何在javascript中克隆迭代器? [英] How to clone an Iterator in javascript?
本文介绍了如何在javascript中克隆迭代器?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
在ES6中,有没有可能克隆迭代器状态?
In ES6, is there any possible to clone an iterator states?
var ma=[1,2,3,4];
var it=ma[Symbol.iterator]();
it.next();
如果我想在这里记住,它说明我应该如何在javascritp中做什么?
if I want to remember here the it states how should I do in javascritp?
它的重新编号是什么?
自
what is remebered in it? since the
JSON.stringify(it) //it would just return {}
推荐答案
您不能克隆任意迭代器,但可以从中创建许多不同的迭代器保持一些状态:
You can’t clone an arbitrary iterator, but you can create many distinct iterators from one by holding onto some state:
function tee(iterable) {
const source = iterable[Symbol.iterator]();
const buffers = [[], []]; // substitute in queue type for efficiency
const DONE = Object.create(null);
const next = i => {
if (buffers[i].length !== 0) {
return buffers[i].shift();
}
const x = source.next();
if (x.done) {
return DONE;
}
buffers[1 - i].push(x.value);
return x.value;
};
return buffers.map(function* (_, i) {
for (;;) {
const x = next(i);
if (x === DONE) {
break;
}
yield x;
}
});
}
用法:
const [a, b] = tee(iterator);
assert(a.next().value === b.next().value);
这篇关于如何在javascript中克隆迭代器?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文