ES6에서는 반복자 상태를 복제 할 수 있습니까?자바 스크립트에서 Iterator를 복제하는 방법은 무엇입니까?
var ma=[1,2,3,4];
var it=ma[Symbol.iterator]();
it.next();
여기서 기억하고 싶다면 javascript에서 어떻게해야합니까?
무엇이 rememered입니까? 이후
JSON.stringify(it) //it would just return {}
ES6에서는 반복자 상태를 복제 할 수 있습니까?자바 스크립트에서 Iterator를 복제하는 방법은 무엇입니까?
var ma=[1,2,3,4];
var it=ma[Symbol.iterator]();
it.next();
여기서 기억하고 싶다면 javascript에서 어떻게해야합니까?
무엇이 rememered입니까? 이후
JSON.stringify(it) //it would just return {}
당신은 임의의 반복자를 복제 할 수 없습니다,하지만 당신은 어떤 상태에 잡고 하나에서 많은 별개의 반복자를 만들 수 있습니다
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);
이터레이터를 복제 할 수 없습니다. 반복자 (iterator) 상태는 기본적으로 완전히 임의적이며 주어진 반복자는 요구에 따라 반복 할 수없는 부작용 (예 : 네트워크 스트림 읽기 또는 쓰기)을 필요로하거나 생성 할 수 있습니다.