企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
# Iterator ## 迭代器的基本模拟 ```javascript const demoIterator = (array) => { let currnetIndex = 0; return { next: () => { return currnetIndex < array.length ? { value: array[currnetIndex++], done: false } : { value: undefined, done: true } } } } const it = demoIterator(['a', 'b']); console.log(it.next()); // { value: 'a', done: false } console.log(it.next()); // { value: 'b', done: false } console.log(it.next()); // { value: undefined, done: true } ``` ## 默认Iterator接口 默认接口设置在Symble.iterator 中,构建类iterator例子如下 ```javascript function Obj(value) { this.value = value; this.next = null; } Obj.prototype[Symbol.iterator] = function() { var iterator = { next: next }; var current = this; function next() { if (current) { var value = current.value; current = current.next; return { done: false, value: value }; } else { return { done: true }; } } return iterator; } var one = new Obj(1); var two = new Obj(2); var three = new Obj(3); one.next = two; two.next = three; for (var i of one){ console.log(i); // 1, 2, 3 } ``` ## 调用Iterator的场合 1. 解构赋值 2. 扩展运算符 3. yield*