es6--iterator 和 for...of

什么是iterator

es6中map set arr obj 这4种数据对象 这样就须要一种统一的接口机制来处理全部不一样的数据结构
做用:
一、为各类数据结构提供一个同一的、简便的数据接口
二、使得数据结构的成员按照某种次序排列
三、es6 新增了 for..of循环 来遍历iteratores6

iterator就是经过不断的next来访问值{value:value}数组

手写iterator

var 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())   返回一个包含value 和done属性的对象
    console.log(it.next())
    console.log(it.next())
    console.log(it.next())

数组 set map 字符串 天生具有iterator遍历器接口数据结构

检测一个数组解构是否天生就具备iterator?

是否具备Symbol.iterator属性code

var arr1=[1,2,3];
    var set1=new Set(['a','b','c'])
    var map1=new Map([['a',1],['b',2]])  //必定要正确的定义Map 
        var str="sasa";
 
    var ai=arr1[Symbol.iterator]();
    var si=set1[Symbol.iterator]();
    var mi=map1[Symbol.iterator]();
    console.log(ai,si,mi)  //就会返回数组、集合、map的遍历器接口
        console.log(str[Symbol.iterator]())  字符串的遍历器接口

可是object是没有Symbol.iterator这个属性的对象

var obj={};
    console.log(obj[Symbol.iterator]())  //报错

具有iterator接口的集合都可以进行哪些操做

一、解构赋值
二、扩展运算符 ...将一个数据结构展开接口

var str="sasa";
     var arrstr=[...str];
     console.log(arrstr)

利用这个原理实现数组去重字符串

var arrchong=[1,2,3,1,1,3,34,4,1];
    console.log([...(new Set(arrchong))])

三、均可以是用for of循环it

var arrchong=[1,2,3,1,1,3,34,4,1];
    for(let i of arrchong){
        console.log(i)
    }
相关文章
相关标签/搜索