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)
    }
相關文章
相關標籤/搜索