ES6之迭代器

简介: ES6之迭代器



前言

迭代器(Iterator)

for…of遍历


迭代器

迭代器是一种接口,为各种不同数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作。(其实大多数语言都有接口,在js中这个接口就是对象的一种属性

1.原生具备Iterator接口的数据(可用for…of遍历)

  • Array
  • Arguments
  • Set
  • Map
  • String
  • TypedArray
  • NodeList

2.工作原理

  • 创建一个指针对象,指向当前数据结构的起始位置
  • 第一次调用对象的next方法,指针自动指向数据结构的第一个成员
  • 接下来不断调用next方法,指针一直往后移动,直到指向最后一个成员
  • 每调用next方法返回一个包含value和done属性的对象
let namelist = ['张三', '李四', '王五', '赵六'];
        for (let n of namelist) {
            console.log(n);
        }
        for (let n in namelist) {
            console.log(n);
        }
        let iterator = namelist[Symbol.iterator]();
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());
        console.log(iterator.next());

这里可以看一下for…of,for…in的区别,前者是遍历键值,后者遍历键名。看一下done属性,你能发现什么呢。

3.自定义遍历数据

知道了工作原理,那么我们就开始思考利用迭代器怎样自定义遍历数据

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        const pepole = {
            name: '王五',
            like: [
                '篮球',
                '武术',
                '吃东西'
            ],
            [Symbol.iterator]() {
                let index = 0;
                let _this = this;
                return {
                    next: function() {
                        if (index < _this.like.length) {
                            const result = {
                                value: _this.like[index],
                                done: false
                            }
                            index++;
                            return result;
                        } else {
                            return {
                                value: undefined,
                                done: true
                            };
                        }
                    }
                }
            }
        }
        for (let p of pepole) {
            console.log(p);
        }
    </script>
</body>
</html>


总结

以上就是迭代器的介绍。

相关文章
|
6月前
|
JavaScript 前端开发
ES6之迭代器(Iterator)
ES6引入了迭代器的概念,这个特性为JavaScript带来了更强大的迭代和异步编程能力。本文将深入探讨ES6的迭代器,介绍其概念、用法以及在实际开发中的应用。 迭代器(Iterator)是ES6引入的一种新的数据结构,它提供了一种统一的遍历机制,可以用来遍历各种不同类型的数据。迭代器的概念、作用和遍历原理如下所述:
53 0
|
2月前
|
索引
ES5常见的数组方法
ES5常见的数组方法
|
6月前
|
索引
ES6学习之数组
ES6学习之数组
ES6常见的数组方法
ES6常见的数组方法
46 1
|
JavaScript 前端开发
ES6——迭代器
迭代器(iterator):是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署lterator接口,就可以完成遍历操作。
82 0
|
数据库
ES6 从入门到精通 # 14:迭代器 Iterator 的用法
ES6 从入门到精通 # 14:迭代器 Iterator 的用法
86 0
ES6 从入门到精通 # 14:迭代器 Iterator 的用法
|
JavaScript 前端开发 Java
【扒一扒】深入理解 ES6 Iterator
本文主要来说下ES6的Iterator,目的在于理解它的概念、作用、以及现有的应用,最后学以致用。 Iterator可以说是ES6内相当重大的一个特性,也是很多其他特性运行的基石。 为什么Iterator地位如此之高呢?
102 0
【扒一扒】深入理解 ES6 Iterator