Blog
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)

HiuZing

🍑
首页
文档
收藏
关于
  • 在线转换时间戳 (opens new window)
  • 在线压缩图片 (opens new window)
  • Float-Double转二进制 (opens new window)
  • 文件转Hex字符串 (opens new window)
  • 前端面试题

  • JavaScript

    • JavaScript语法

      • JavaScript-数据类型
      • JavaScript-ES6编程风格
      • JavaScript-异步编程
      • JavaScript-Promise
      • JavaScript-Proxy
      • JavaScript-Reflect
      • JavaScript-Iterator
        • JavaScript-Iterator
        • 自定义遍历数据
      • JavaScript-Module
      • JavaScript-拷贝
      • JavaScript-this
      • JavaScript-垃圾回收机制
      • JavaScript-闭包
      • let和const
      • JavaScript-参数默认值
      • JavaScript-rest
      • JavaScript-扩展运算符
      • JavaScript-Symbol
      • JavaScript-生成器
      • JavaScript-class类
      • JavaScript-数值扩展
      • JavaScript-高阶函数
      • JavaScript-箭头函数
    • JavaScipt对象

    • JavaScript实例

    • JavaScript浏览器BOM

    • JavaScript DOM

  • Vue2

  • port

  • CSS

  • Node.js

  • JavaScript优化

  • uniapp

  • Mini Program

  • TypeScript

  • 面向对象编程

  • UI组件

  • Plugin

  • Vue3

  • 性能优化

  • Axios

  • 状态管理

  • React

  • Mock

  • Icon

  • Template

  • 构建工具

  • 项目规范配置

  • Taro

  • SVG

  • React Native

  • 前端
  • JavaScript
  • JavaScript语法
HiuZing
2023-02-28
目录

JavaScript-Iterator

# JavaScript-Iterator

遍历器(Iterator)

需要一种统一的接口机制,来处理所有不同的数据结构

Iterator 的作用有三个:

一是为各种数据结构,提供一个统一的、简便的访问接口;

二是使得数据结构的成员能够按某种次序排列;

三是 ES6 创造了一种新的遍历命令for...of循环,Iterator 接口主要供for...of消费。

var it = makeIterator(['a', 'b']);

it.next() // { value: "a", done: false }
it.next() // { value: "b", done: false }
it.next() // { value: undefined, done: true }

function makeIterator(array) {
  var nextIndex = 0;
  return {
    next: function() {
      return nextIndex < array.length ?
        {value: array[nextIndex++], done: false} :
        {value: undefined, done: true};
    }
  };
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16

是一种接口,为各种不同的数据结构提供统一的访问机制任何数据结构只要部署 iterator 接口,就可以完成遍历操作。

笔记

只要有iterator属性,就可以使用for..of 遍历

  1. 一种新的遍历命令 for..of循环,lterator 接口主要供 for...of 消费
  2. 原生具备iterator接口的数据(可用 for..of..遍历)
    1. Array
    2. Arguments
    3. Set
    4. Map
    5. String
    6. TypedArray
    7. NodeList
  1. 工作原理

    1. 创建一个指针对象(由Symbol.iterator的函数创建),指向当前数据结构的起始位置

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

    3. 接下来不断调用 next 方法,指针一直往后移动,直到指向最后一个成员

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

      注:需要自定义遍历数据的时候,要想到迭代器

// 声明一个数组
const xiyou = ['1','2','3']

let iterator = xiyou[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}
1
2
3
4
5
6
7
8
9
10

# 自定义遍历数据

需求:使用for..of遍历,每次返回的结果是对象里面的数组成员(不能使用banji.stus.forEach,因为不符合面向对象思想)

const banji = {
    name:"终极一班",
    stus:[
        'a',
        'b',
        'c',
        'd'
    ],
    [Symbol.iterator](){
        // 索引变量
        let index = 0;
        let _this = this;
        return {
            next:function(){
                if(index < _this.stus.length){
                    cosnt result = { value: _this.stus[index],done: false }
                    // 下标自增
                    index++
                    // 返回结果
                    return result
                } else {
                    { value: undefined,done: true }
                }
            }
        }
    }
}

// 遍历对象
for(let v of banji){
    console.log(v) // a // b // c // d
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
上次更新: 2024/08/14, 04:14:33
JavaScript-Reflect
JavaScript-Module

← JavaScript-Reflect JavaScript-Module→

最近更新
01
React Native 使用SVG
08-13
02
Docker基础命令
08-04
03
算数逻辑单元
07-30
更多文章>
Theme by Vdoing | Copyright © 2021-2024 WeiXiaojing | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式