use*_*909 5 javascript iterator ecmascript-6
在 ES6 中,是否有可能克隆迭代器状态?
var ma=[1,2,3,4];
var it=ma[Symbol.iterator]();
it.next();
Run Code Online (Sandbox Code Playgroud)
如果我想记住这里它指出我应该在javascritp中做什么?
里面记着什么?自从
JSON.stringify(it) //it would just return {}
Run Code Online (Sandbox Code Playgroud)
您可以\xe2\x80\x99t克隆任意迭代器,但您可以通过保持某种状态来从一个迭代器创建许多不同的迭代器:
\n\nfunction tee(iterable) {\n const source = iterable[Symbol.iterator]();\n const buffers = [[], []]; // substitute in queue type for efficiency\n const DONE = Object.create(null);\n\n const next = i => {\n if (buffers[i].length !== 0) {\n return buffers[i].shift();\n }\n\n const x = source.next();\n\n if (x.done) {\n return DONE;\n }\n\n buffers[1 - i].push(x.value);\n return x.value;\n };\n\n return buffers.map(function* (_, i) {\n for (;;) {\n const x = next(i);\n\n if (x === DONE) {\n break;\n }\n\n yield x;\n }\n });\n}\nRun Code Online (Sandbox Code Playgroud)\n\n用法:
\n\nconst [a, b] = tee(iterator);\nassert(a.next().value === b.next().value);\nRun Code Online (Sandbox Code Playgroud)\n