迭代器(Iterators)
作用
- 迭代器(lterator)是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口(对象的属性:Symbol.iterator),就可以完成遍历操作。
特点
1、ES6创造了一种新的遍历命令
for…of
循环,lterator接口主要供for…of消费;2、原生具备iterator 接口的数据(可用for of遍历):
Array
、Arguments
、Set
、Map
、String
、TypedArray
、NodeList
3、工作原理
1、创建一个指针对象,指向当前数据结构的起始位置
2、第一次调用对象的next方法,指针自动指向数据结构的第一个成员
3、接下来不断调用next方法,指针一直往后移动,直到指向最后一个成员
4、每调用next方法返回一个包含value和done属性的对象
注意
需要自定义遍历数据的时候,要想到迭代器
js
const arr = [1, 2, 3];
// 使用 for...of 遍历数组
for (let v of arr) {
console.log(v); // 1,2,3
}
js
const arr = [1, 2, 3];
let iterator = arr[Symbol.iterator]();
// 调用对象的next方法
console.log(iterator.next()); // {value: 1, done: false}
console.log(iterator.next()); // {value: 2, done: false}
console.log(iterator.next()); // {value: 3, done: false}
console.log(iterator.next()); // {value: undefined, done: true}
实现自定义遍历数组
js
// 定义一个对象
const obj = {
name: 'a',
stus: ['测试1', '测试2', '测试3'],
[Symbol.iterator]() {
//索引变量
let index = 0;
return {
next: () => {
if (index < this.stus.length) {
const result = { value: this.stus[index], done: false };
index++;
return result;
} else {
return { value: undefined, done: true };
}
},
};
},
};
for (let v of obj) {
console.log(v); // 测试1, 测试2, 测试3
}