iterator和for-of循环

一、定义

在ES6中新增了Set和Map两种数据结构,再加上JS之前原有的数组和对象,这样就有了四种数据集合,平时还可以组合使用它们,定义自己的数据结构,比如数组的成员是Map,Map的成员是对象等。这样就需要一种统一的接口机制,来处理所有不同的数据结构。  Iterator就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作,而且这种遍历操作是**依次**处理该数据结构的所有成员。  Iterator遍历器的做用:

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

- 使得数据结构的成员能够按某种次序排列。

- ES6新增了遍历命令for...of循环,Iterator接口主要供for...of消费。

二、 Iterator的遍历过程:

- 创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。

- 第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。

- 第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。

- 不断调用指针对象的next方法,直到它指向数据结构的结束位置。

- 每一次调用next方法,都会返回数据结构的当前成员的信息。具体来说,就是返回一个包含value和done两个属性的对象。其中,value属性是当前成员的值,done属性是一个布尔值,表示遍历是否结束。

const arr = [1, 2, 3];

function iterator(arr){
  let index = 0;
  return {
    next: function (){
      return index < arr.length ?
      {value: arr[index++], done: false} :
      {value: undefined, done: true};
    }
  }
}

const it = iterator(arr);

console.log(it.next());
console.log(it.next());
console.log(it.next());
console.log(it.next());

三、凡是具有 Symbol.iterator 属性的数据结构都具有 Iterator 接口

const arr = [1, 2, 3];
const set = new Set([‘a‘, ‘b‘, ‘c‘]);
const map = new Map([[‘a‘, 1]]);

const itArr = arr[Symbol.iterator]();
const itSet = set[Symbol.iterator]();
const itMap = map[Symbol.iterator]();

console.log(itArr);
console.log(itSet);
console.log(itMap);

console.log(itSet.next());
console.log(itSet.next());
console.log(itSet.next());
console.log(itSet.next());

const obj = {};

console.log(obj[Symbol.iterator]);

四、具备iterator接口的数据结构都可以进行如下操作

--  解构赋值

const set = new Set([‘a‘, ‘b‘, ‘c‘]);
let [x, y] = set;

--  扩展运算符

let str = ‘leiliangqing‘;
let arrStr = [...str];

-- for...of 循环

const ofArr = [1, 2, 3, 4];

for(let i of ofArr){
  console.log(i);
}

const m = new Map();

m.set(‘a‘, 1).set(‘b‘, 2).set(‘c‘, 3);

// for(let data of m){
//   console.log(data);
// }

for(let [key, value] of m){
  console.log(key, value);
}

  

时间: 2024-10-26 22:54:56

iterator和for-of循环的相关文章

ES6 之 Set数据结构和Map数据结构 Iterator和for...of循环

ECMAScript 6 入门 Set数据结构 基本用法 ES6提供了新的数据结构Set.它类似于数组,但是成员的值都是唯一的,没有重复的值. Set本身是一个构造函数,用来生成Set数据结构. var s = new Set(); [2, 3, 5, 4, 5, 2, 2].map(x => s.add(x)); for (let i of s) { console.log(i); } // 2 3 5 4 上面代码通过add方法向Set结构加入成员,结果表明Set结构不会添加重复的值. 向S

25.使用Iterator和增强型for循环遍历Map集合

/** * 宠物类,狗狗和企鹅的父类. */ public abstract class Pet { protected String name = "无名氏";// 昵称 protected int health = 100;// 健康值 protected int love = 0;// 亲密度 public abstract void eat(); //抽象方法eat(),负责宠物吃饭功能. /** * 无参构造方法. */ public Pet() { } /** * 有参构造

java中的Iterator与增强for循环的效率比较

最近在优化代码时遇到了这个问题:Iterator与增强for循环到底哪个效率高?之前在学习的时候,好像记着老师说过遍历集合(如list)时,使用iterator好像正规一些,因为是专用的,但是运行效率问题确实不曾考虑,今天做了一个实验:对两者进行了简单的比较,得出的结论是:增强for循环运行效率更高一些.但是我不确定这是否会代表全部情况,这里仅仅记录一下,做个参考,后期有新的认识再来补充,欢迎大家批评指正. 1 public static void main(String[] args) { 2

es6笔记(6) Iterator 和 for...of循环

概要 js中的数组.对象,加上ES6中增加的Map.Set四种数据集合. Iterator提供了一种机制,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署Iterator接口,就可以完成遍历操作.(依次操作) 作用: 为各种数据结构提供了统一的,简便的访问接口. 使得数据结构的成员能够按照某种顺序排列. ES6中增加了遍历命令 for...of循环,Iterator接口主要供for...of消费 原理 创建一个指针对象,指向当前数据结构的起始位置. 遍历器对象本质上是一个指针. 第一

ES6(Iterator 和 for...of 循环)

Iterator 和 for...of 循环 1.什么是 Iterator 接口 Iterator 接口功能:用一种相同办法的接口让不同的数据结构得到统一的读取命令的方式 2.Iterator的基本用法 见代码 3.for...of for...of 循环就是不断调用Iterator 接口来达到这种形式 一.Iterator 接口介绍 1.数组调用Iterator 接口,数组内部已实现,直接调用即可,false代表还有下一步,true 代表结束 2.自定义Iterator 接口(先遍历 star

ES6的新特性(14)——Iterator 和 for...of 循环

Iterator 和 for...of 循环 Iterator(遍历器)的概念 JavaScript 原有的表示"集合"的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Map和Set.这样就有了四种数据集合,用户还可以组合使用它们,定义自己的数据结构,比如数组的成员是Map,Map的成员是对象.这样就需要一种统一的接口机制,来处理所有不同的数据结构. 遍历器(Iterator)就是这样一种机制.它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结

Java Iterator和增强for循环 for each详解

Iterator是Java中的一个迭代器接口(Interface),用来提供标准的Java迭代器 Iterator支持泛型因为集合(Collection)类可以装入的类型是不确定的,从集合中取出的都是Object类型,加入泛型,就是告诉编译器确定要装入的对象类型,取值时就无需强制转换了. for each 是 Java 5 中新增的一个循环结构,本质上是一个Iterator,特点是可以用来遍历集合元素而不用考虑集合下标. 综合实例: package net.csdn.shf4715; impor

15.Iterator和for...of循环

1.Iterator(遍历器)的概念 JavaScript原有的表示“集合”的数据结构,主要是数组(Array)和对象(Object),ES6又添加了Map和Set.这样就有了四种数据集合,用户还可以组合使用它们,定义自己的数据结构,比如数组的成员是Map,Map的成员是对象.这样就需要一种统一的接口机制,来处理所有不同的数据结构. 遍历器(Iterator)就是这样一种机制.它是一种接口,为各种不同的数据结构提供统一的访问机制.任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依

es6 javascript的Iterator 和 for...of 循环

1 Iterator( 遍历器) 的概念 JavaScript 原有的表示" 集合" 的数据结构, 主要是数组( Array) 和对象( Object), ES6 又添加了 Map 和 Set. 这样就有了四种数据集合, 用户还可以组合使用它们, 定义自己的数据结构, 比如数组的成员是 Map, Map 的成员是对象. 这样就需要一种统一的接口机制, 来处理所有不同的数据结构. 遍历器( Iterator) 就是这样一种机制. 它是一种接口, 为各种不同的数据结构提供统一的访问机制.

ES6学习之Iterator和For...of循环

一.Iterator(它是一种接口,为各种不同的数据结构提供统一的访问机制.Iterator 接口主要供for...of消费) 默认Iterator接口(默认的 Iterator 接口部署在数据结构的Symbol.iterator属性,或者说,一个数据结构只要具有Symbol.iterator属性,就可以认为是"可遍历的"(iterable).Symbol.iterator属性本身是一个函数) 部署Iterator 接口: const obj = { [Symbol.iterator]