1. 程式人生 > >ES6—— iterator和for-of循環

ES6—— iterator和for-of循環

nbsp lse function map size key con 部署 sym

Iterator 遍歷器的作用:
為各種數據結構,提供一個同意的,簡便的訪問接口。
是的數據結構的成員能夠按某種次序排列。
ES6 新增了遍歷命令 for...of 循環,Iterator接口主要供 for...of 消費。

1、手寫Iterator接口。

  const arr=[ 1,2,3 ];
  function iterator(arr){
    let index=0;
    return {
      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()); ///第四條 輸出 undefined


2、凡是具有 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 itSetr=arr[Symbol.iterator]();   const itMap =arr[Symbol.iterator]();   console.log(itSet.next());   console.log(itSet.next());   console.log(itSet.next());   console.log(itSet.next()); ///第四條 輸出 undefined   const obj = {};   console.log(obj[Symbol.iterator]); 對於空的 直接輸出 undefined


3、具備iterator接口的數據結構都可以進行如下操作
結構賦值。
擴展運算符。

  

  let str="miaov";
  let arrstr=[...str];
  console.log(arrstr); //輸出 m.i . a.o.v

  const arr2=[1,"a","a","b","b"];
  console.log([...new set(arr2)]) ; //輸出結構為 1,a,b


4、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)
  for(let[key,value] of m){
    console.log(key,value);
  }


//如何給一個不具備iterator結構的數據結構部署一個iterator接口?

const d={
  "0":"a",
  "1":"b",
  "2":"c",
  "3":"d",
  "4":"e",
  length:5
};

以上。

ES6—— iterator和for-of循環