什么是iterator
es6中map set arr obj 这4种数据对象 这样就需要一种统一的接口机制来处理所有不同的数据结构
作用:
1、为各种数据结构提供一个同一的、简便的数据接口
2、使得数据结构的成员按照某种次序排列
3、es6 新增了 for..of循环 来遍历iterator
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属性
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接口的集合都能够进行哪些操作
1、解构赋值
2、扩展运算符 ...将一个数据结构展开
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))])
3、都可以是用for of循环
var arrchong=[1,2,3,1,1,3,34,4,1];
for(let i of arrchong){
console.log(i)
}
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。