ES6 迭代器

ES6 迭代器,第1张

一;概念

1.迭代器是帮助我们对某个数据结构进行遍历的对象, 它有一个 next 方法, next 方法返回一个对象。

2.如果该数据类型上有 symbol.interator 方法 则该数据类型可以被遍历

3.给对象添加 symbol.interator 方法可以指定该对象的遍历规则

二;Symbol.iterator 方法介绍

// 迭代器工作原理

        // 1.创建一个指针对象,指向当前数据结构的起始位置

        // 2.第一次调用对象的 next 方法,指针自动指向数据结构的第一个成员

        // 3.不断调用 next 方法,指针一直向后移动,直到指向最后一个成员 (done属性值为true)

        // 4.每调用 next 方法返回一个包含 value 和 done 属性的对象

        // 4.每调用 next 方法返回一个包含 value 和 done 属性的对象

let iterator = xiyou[Symbol.iterator]();
        console.log('iterator内容',iterator);
        // 调用 interator 对象身上的 next 方法
        console.log('next',iterator.next());
        console.log('next',iterator.next());
        console.log('next',iterator.next());
        console.log('next',iterator.next());
        console.log('next',iterator.next());

打印内容:

 三;使用迭代器

需求:遍历 banji 对象 依次输出对象中 stus 数组的值 --- 核心:自定义 Symbol.iterator方法

// 定义一个对象
        const banji = {
            name: '终极一班',
            stus: [
                'xiaoming',
                'xiaotian',
                'xiaowang',
                'xiaohong'
            ],
            // 添加 Symbol.iterator方法
            [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 k of banji) {
            console.log(k);
        }

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/927324.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-17
下一篇 2022-05-17

发表评论

登录后才能评论

评论列表(0条)

保存