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 };
以上。