set和map去重调用什么方法_ECMAScript 6基础-Set单值集合和Map键值对集合的初始化、遍历、常用方法详解,Set常用于数组去重...

ECMAScript 6基础(五)

ECMAScript 6也叫ECMAScript 2015,它是2015年发布一个继ES5.1以后的一个版本,不建议直接在浏览器里使用(兼容性低)

在学习ES6的过程中,我们建议使用 nodejs 作为学习环境,NodeJS可以兼容ES6

Set单值集合

Set是一个类数组,其实它是一个不重复的类数组,而且Set只有值没有键

Set的初始化

首先,创建一个Set,可以有参数,参数类型是有迭代能力的类型(如Array,Set,Map,NodeList,arguments,TypedArray,String)

let s=new Set();//空的单值集合

let s=new Set(['a','b','c','d']);//集合存放了5个元素

Set是一个不重复的单值集合,所以当我们向里面添加重复的元素时,它会自动过滤掉

let s1=new Set(['a','b','c','d','c']);

这个时候得到的结果仍然是Set {'a','b','c','d'} ,他将重复的元素直接过滤掉了,可以利用Set不允许重复的元素这一特性来数组去重

let arr=['a','b','c','d','e','a','e','c','b','g'];

let s=new Set(arr);

let arr1=Array.from(s);

let arr2=Array.of(...s);

console.log(arr1);//[ 'a', 'b', 'c', 'd', 'e', 'g' ]

console.log(arr2);//[ 'a', 'b', 'c', 'd', 'e', 'g' ]

Set对象的常用方法

1.add()向集合里面添加元素,重复的元素添加不进去,没有限制数据类型;返回当前添加进去以后的Set对象(可以形成链式语法)

2.delete()向集合里面删除元素,如果删除成功,则返回 true ,如果删除失败,则返回 false

3.has()返回当前Set集合里面有没有这个元素

4.size属性,获取当前Set集合里面的元素个数

Set对象的遍历

首先我们使用for in 遍历,但是发现无法使用for…in遍历Set对象(程序直接跳过)。因为for...in 只能遍历有索引的集合(有序集合),而Set是一个单值集合,他没有键(也就没有索引)。所以我们要使用迭代器(iterable)去遍历,使用for...of 遍历Set对象

let arr=['a','b','c','d','e','a','e','c','b','g'];

let s=new Set(arr);

for(let item of s){

console.log(item);

}

Map键值对集合

Map与Set的数据类型相似,他们都是一个集合,但是map是一个键值对集合,它可以在添加元素的过程中,实现键与值的对象

Map的初始化

let m=new Map();//创建了一个空的map集合

也可以向构造函数Map里面传递参数进行初始化,参数类型是有迭代能力的类型(如Array,Set,Map,NodeList,arguments,TypedArray,String)

let stu={

name:'catchWind',

sex:'男',

age:18

};

var entry=Object.entries(stu);

console.log(entry);//[ [ 'name', 'catchWind' ], [ 'sex', '男' ], [ 'age', 18 ] ]

let m=new Map(entry);

console.log(m);//Map { 'name' => 'catchWind', 'sex' => '男', 'age' => 18 }

Object.entries() 返回一个给定对象自身可枚举属性的键值对数组,通俗点就是Object.entries() 可以把一个对象的键值以数组的形式遍历出来,结果和for...in 一致,但不会遍历原型属性

除了使用上面的方式进行初始化以外,还可以使用下面的方式

let m=new Map([['name','catchWind'],['sex','男'],['age',18]]);

Map对象的常用方法

1.set()方法,向map集合里面添加键值对,但是要注意,键不允许重复,如果重复则添加不进去,会将前面的值替换掉。添加完成以后返回的就是得到的map,所以可以实现链式语法

2.delete()方法,通过一个key向map集合里面删除一个键值对,删除成功返回true,删除失败返回false

3.has()方法,判断map集合里面有没有这个键

4.size属性,判断map里面键值对的长度

Map对象的遍历

map是一个键值对集合,所以有三种需求的遍历

1.遍历所有的key

2.遍历所有的value

3.遍历所有的key与value

let m=new Map();

m.set('name','catchWind').set('sex','男').set('age',18);

//使用key的迭代器,遍历所有的key

let keyIterator=m.keys();//返回一个当前map的key的迭代器 [Map Iterator] { 'name', 'sex', 'age' }

//keyIterator.next() { value: 'name', done: false }

while((abc=keyIterator.next()).done==false){//done为true时即迭代完毕

console.log(abc.value);//name sex age

}

//使用value的迭代器,遍历所有的value

let valueIterator=m.values();

while((abc=valueIterator.next()).done==false){

console.log(abc.value);//catchWind 男 18

}

上面的遍历方式是针对key与value的两种不同方式,但我们仍然可以使用迭代器遍历方法for...of 来进行

/* 第一步

for (let item of m){

console.log(item[0],item[1]);

}

*/

/* 第二步 演变

for(let item of m){

let [key,value]=item;//解构

console.log(key,value);

}

*/

//第三步 演变最后

for(let [key,value] of m){

console.log(key,value);

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值