Skip to content

迭代器(Iterators)

作用

  • 迭代器(lterator)是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口(对象的属性:Symbol.iterator),就可以完成遍历操作。

特点

  • 1、ES6创造了一种新的遍历命令 for…of 循环,lterator接口主要供for…of消费;

  • 2、原生具备iterator 接口的数据(可用for of遍历):ArrayArgumentsSetMapStringTypedArrayNodeList

  • 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
}

Released under the MIT License.