迭代器javascript
Posted wanluToPro
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了迭代器javascript相关的知识,希望对你有一定的参考价值。
迭代器
let x = [1, 2, 3, 4];
const [a, b, c] = x;
console.log([a, b, c]); //[1,2,3]
迭代器
console.log(x[Symbol.iterator]); //[Function: values]
数组默认有实现迭代器
构造迭代器
let iterator = x[Symbol.iterator]();
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
console.log(iterator.next());
/**
value: 1, done: false
value: 2, done: false
value: 3, done: false
value: 4, done: false
value: undefined, done: true
*/
迭代器是从头向后迭代、如果迭代器使用时中间插入了新的元素只要在迭代器或之后则迭代器也会做出变化
类迭代器接口,方法实现
class Foo
[Symbol.iterator]()
return
next()
return
done: false,
value: 'foo'
let f = new Foo();
console.log(f[Symbol.iterator]); //[Function: [Symbol.iterator]]
自定义迭代器
class Counter
constructor(limit)
this.count = 1;
this.limit = limit;
next()
if (this.count <= this.limit)
return
done: false,
value: this.count++
;
else
return
done: true,
value: undefined
;
[Symbol.iterator]()
return this;
let counter = new Counter(3);
for (let i of counter)
console.log(i); //1 2 3
可以利用闭包 返回多个迭代器
[Symbol.iterator]()
let count=1,limit=this.limit;
return
next()
提前终止迭代器 hook
当在使用for of 时可能会提前结束 使用 break
提前结束时 会自动调用 迭代器的return方法
class T
[Symbol.iterator]()
return
next()
return
done: false
;
,
return ()
console.log("提前终止迭代器");
return
done: true
;
let t = new T();
for (let i of t)
break; //提前终止迭代器
以上是关于迭代器javascript的主要内容,如果未能解决你的问题,请参考以下文章
[JavaScript 刷题] 树 - 二叉搜索树迭代器, leetcode 173