ES6迭代器、set、map知识点

1.迭代器

迭代器(Iterator)就是这样一种机制。它是一种接口,为各种不同的数据结构提供统一的访问机制。任何数据结构只要部署Iterator接口,就可以完成遍历操作(即依次处理该数据结构的所有成员)

Iterator 的作用有三个:一是为各种数据结构,提供一个统一的、简便的访问接口;二是使得数据结构的成员能够按某种次序排列;三是ES6创造了一种新的遍历命令for...of循环,Iterator接口主要供for...of消费。

Iterator 的遍历过程是这样的。

  1. 创建一个指针对象,指向当前数据结构的起始位置。也就是说,遍历器对象本质上,就是一个指针对象。

  2. 第一次调用指针对象的next方法,可以将指针指向数据结构的第一个成员。

  3. 第二次调用指针对象的next方法,指针就指向数据结构的第二个成员。

  4. 不断调用指针对象的next方法,直到它指向数据结构的结束位置。

 

1.迭代器实现了Iterator接口,只要有实现了Iterator就可以使用for-of遍历
let arr=[1,2,3,4,5];
console.log(arr.keys());
console.log(arr.values());
console.log(arr.entries());
// keys values entries 当前变量是迭代器对象
// 迭代器对象实现了Iterator接口,只要实现了迭代接口就可以使用for-of 遍历
// let [a,b]=10; 报错10 is not iterable
let str='hello'; //实现了迭代器接口,可以遍历
// console.log(a,b);
for(let key of str){
    console.log(key)
}
// 以前遍历字符串
for(i=0;i<str.length;i++){
    console.log(str.charAt(i))
}


let [...a]=str;
console.log(a)
let result=str.split("")
console.log(result);

遍历迭代器对象
let arr=[1,2,3]
let keys=arr.keys()
for(let key of keys){
    console.log(key)
}
let values=arr.values();
for(let value of values){
    console.log(value,'--------')
}
let entries=arr.entries();
for(let entry of entries){
    console.log(entry)
}
while(!(result=keys.next()).done){
    console.log(result)
}
结果:
//{ value: 0, done: false }
//{ value: 1, done: false }
//{ value: 2, done: false }
for-of实现原理就是调用迭代器的next()方法,第一次调用将指针指向数据结构的第一个成员,依次调用依次指向,直到没有成员可以指向,done为true
	迭代过程:创建一个指针对象,指向当前的数据结构起始位置;
			第一次调用指针对象的next方法,指向数据结构的第一个成员;
            第二次调用指针对象的next方法,指向数据结构的第二个成员;
			直到done为true,指向数据结构的结束位置;
let keys=arr.keys();
let values=arr.values();
let entries=arr.entries()
console.log(keys.next())
console.log(keys.next())
console.log(keys.next())
console.log(keys.next())
console.log(keys.next())
console.log(keys.next())
console.log(entries.next())
结果:
//{ value: 0, done: false }
//{ value: 1, done: false }
//{ value: 2, done: false }
//{ value: undefined, done: true }
原生具备 Iterator 接口的数据结构如下
	Array、Map、Set、String、TypedArray、arguments、NodeList 
    arguments、NodeList 为类数组对象

 

2.Set

Set类似于数组,但是成员的值都是唯一的,没有重复的值。Set 本身是一个构造函数,用来生成 Set 数据结构展。Set 构造函数可以接受一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。

Set API
var set=new Set()
//创建Set集合 成员是唯一的,key-value是一样的
//添加元素
set.add('hello');
set.add('world');
set.add('world');
console.log(set);
// 删除元素
set.delete('hello');
console.log(set);
// 遍历
let keys=set.keys()
let values=set.values()
let entries=set.entries();
console.log(keys,values,entries);
set.forEach((value)=>{
    console.log(value)
})
//判断有没有某个成员
set.has('hello');返回布尔值true或者false
//清空set
set.clear();
//返回set成员个数
set.size
------------------------------------------------
set应用 set构造函数可以接受数组或者其他可遍历的数据结构
let set=new Set([1,2,3,4,1,2,3,4]);
console.log(set);
//数组去重 
let arr=[1,2,3,5,3,2];
let result=new Set(arr);
console.log(result);
//将字符串转换为数组
let [...arr1]='hello';
//将set集合转换为数组
let [...arr2]=result;
console.log(arr2);

console.log([...new Set(arr)])

3.Map

Map类似于对象,也是键值对的集合,但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。也就是说,Object 结构提供了“字符串—值”的对应,Map结构提供了“值—值”的对应,是一种更完善的 Hash 结构实现。如果你需要“键值对”的数据结构,Map 比 Object 更合适。Map 可以接受一个数组作为参数。该数组的成员是一个个表示键值对的数组。

let obj={
    name:"zhangsan",
    age:12
}
//遍历键值对组成的数组
let arr=Object.entries(obj);
console.log(arr);
//将数组作为参数放到Map中
let map=new Map(arr)
console.log(map);

// 添加元素
map.set('1','1');
console.log(map);
// 删除元素
map.delete('name');
console.log(map);
// 获取元素
console.log(map.get('age'));
// 遍历
let keys=map.keys()
let values=map.values()
let entries=map.entries();
console.log(keys,values,entries);
map.forEach((value,key)=>{
    console.log(value,key)
})

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值