ES6-Set和Map结构

Set类似数组,只有value,成员唯一,无重复,本质构造函数
通过new实例化Set实例
参数:数组(或有iterable接口的数据结构)
字符串、数组、对象、Set、Map、arguments、元素集合(DOM)

let set=new Set('hello');
console.log(set);

在这里插入图片描述
属性:
size:成员总数
实例方法:
add():添加某个值,返回新的Set
delete():删除某个值,返回布尔值
has():判断实例中是否有某个值,返回布尔值
clear():清空所有成员

let set=new Set();
set.add(1);
set.add(NaN).add(NaN);
console.log(set);
set.has(1);
set.delete(1);
set.has(1);
set.clear();

在这里插入图片描述
遍历方法:
Set的默认遍历器生成函数Symbol.iteratorf values
在这里插入图片描述

for(let i of new Set(['a','b','c'])){
//由于默认的遍历器生成函数是values 后台打印的是键值
	console.log(i);
}

在这里插入图片描述
entries() 遍历返回值,得到的是 两个相同的value组成的数组
values() 获取所有的value
keys() 获取所有的value

let set=new Set(['a','b','c']);
for(let key of set.keys()){
	console.log(key);
}
for(let value of set.values()){
	console.log(value);
}
for(let [key,value] of set.entries()){
	console.log('键:'+key+','+'值:'+value);
}

在这里插入图片描述
forEach() :遍历所有的键值,参数是回调函数可以有三个参数,参数1:当前对象的键,参数2:当前对象的值

let set=new Set(['a','b','c']);
set.forEach((key,value)=>{
	console.log("键:"+key);
	console.log("值:"+value);
})

在这里插入图片描述
数组去重:

let arr1=[1,2,34,56],arr2=[2,4,5,9,34];
let arr=[...new Set([...arr1,...arr2])];
//或者是下面
//let arr=Array.from(new Set[...arr1,..arr2]);

在这里插入图片描述
在这里插入图片描述
将Set数据结构转成数组:
扩展运算符:[..new Set().]
Array.from(new Set())
数组的map()、filter()方法也可以用在Set结构上

let set=new Set([1,2,3,4,5,6,7,8,9]);
console.log(set.size);
//将set中的值 乘以2之后返回组成一个新的Set
let set1=new Set([...set].map(x=>x*2));
console.log(set1);
//将set中的值 过滤掉小于等于2的 留下大于2的 组成新的Set
let set2=new Set([...set].filter(x=>x>2));
console.log(set2);

在这里插入图片描述
Map数据结构,key可以是任何类型,值-值
参数数组,每个成员是双元素数组

let item=[['day',"星期一"],['day2','星期二'],['day3','星期三'],['day4','星期四'],['day5','星期五']];
//其中key每个数组的索引为0的键值,value是索引为1的键值
let map=new Map(item);

在这里插入图片描述
同一个键多次声明,后面的覆盖前面的值
set(key,value):给Map实例设置键值对
get(key):获取对象的键值对
has(key):返回布尔值,判断是否有key对应的value值
delete(key):返回布尔值,显示是否删除key对应的成员
clear():清空所有成员

//实例化Map
let map=new Map();
//给map中添加key=1,value=2的成员
map.set(1,2);
//给map中添加key=2,value=3的成员
map.set(2,3);
//给map中添加key=1,value=3的成员
map.set(1,3);
map.set(['a','b'],3);
console.log(map);

在这里插入图片描述

//判断key=1的成员是否存在
map.has(1);
//删除key=1对应成员
map.delete(1);
//判断key=1的成员是否存在
map.has(1);
//获取key=1的成员
map.get(2);
//清空map中所有成员
map.clear();

循环遍历:
Map结构默认的遍历器函数f entries
在这里插入图片描述

for(let map of new Map([[1,2],[2,3],[3,4]])){
//循环遍历 遍历器中的成员
	console.log(map);
}

在这里插入图片描述
values()
keys()
entries()
forEach()

let map=new Map([['a',2],['b',3],['c',5]]);
for(let key of map.keys()){
	console.log(key);
}
for(let value of map.values()){
	console.log(value);
}
for(let entry of map.entries()){
	console.log(entry);
}

在这里插入图片描述
数组转成Map

  1. 数组传入Map中
let arr=[[1,2],[3,4]];
console.log(new Map(arr));
  1. 遍历数组添加键值对
let arr=[1,2,3,4,5];
let map=new Map();
for(let i of arr){
	map.set(i,arr[i]);
}
console.log(map);

Map转成数组

  1. 扩展运算符:
let map=new Map([[1,2],[3,4]]);
let arr=[...map];
console.log(arr);
  1. Array.from()
let map=new Map([[1,2],[3,4]]);
let arr=Array.from(map,x=>x*2);
console.log(arr);

对象与Map间的互换和数组与Map间的互换类似
对象转成Map

let obj={'a':1,'b':2},map=new Map();
for(let [key,value] of Object.entries(obj)){
	map.set(key,value);
}
console.log(map);

Map转成对象

function mapToObject(map){
//创建原型为空的对象,也就是不继承原型
	let obj=Object.create(null);
	 for(let [key,value] of map.entries()){
		obj[key]=value;
	}
	return obj;
}
let map=new Map([[1,2],[3,4]]);
mapToObject(map);

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值