ES6—— iterator和for-of循环

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
};

以上。

猜你喜欢

转载自www.cnblogs.com/zyhbook/p/9425934.html