es6入门-set、map数据结构

Set

类似于数组,其成员是唯一的,没有重复的值;

//接收一个数组作为参数,用于初始化
var temp = new Set([1,2,3,2]);
//不会添加重复的值
temp.size //3
//使用add()添加元素
temp.add(4);

向Set中添加值不会发生类型转换(严格相等===),3和“3”是不同的值;两个对象总不相等;例外NaN等于自身,但基本运算中NaN!=NaN&NaN!==NaN

Set结构属性、方法

add() //添加值,返回添加后的Set结构
delete() //删除值,返回布尔值,是否删除成功
has() //是否存在,布尔值
clear() //清除所有成员
Array.from() 可以将Set结构转为数组,利用特性可用于数组去重。简写:[…temp],使用扩展运算符转换为数组。

遍历操作:

keys() //键名
values() //键值     **为Set 结构的遍历接口,可省略调用方法
entries() //键值对
forEach() //遍历每个成员

let set = new Set(['red','green','blue']);
for(let item of set.keys()){
	console.log(item);
}
for(let item of set.values()){
	console.log(item);
}         // "red" "green" "blue"
for(let item of set.entries()){
	console.log(item);
}         //["red","red"] ["green","green"] ["blue","blue"]

Set结构没有键名,keys()返回的结果和values()一样;在进行遍历时可省略方法

for(let item of temp){
	console.log(item);
}

使用Set结构实现并集、交集、差集

let t = new Set([1,2,3]);
let p = new Set([2,4,5]);
//并集
let union = new Set([...t,...p]); 
[...union]   //[1,2,3,4,5]
//交集
let intersect = new Set([...t].filter(item=>p.has(item)));
[...intersect]    //[2]
//差集
let difference = new Set([...t].filter(item=>!p.has(item)));
[...difference]   //[1,3]

在遍历时对数据进行某种操作,再同步到数据结构中:

//1.数据处理完返回的数据再new 一个Set结构赋值给原来的结构
let  set = new Set([1,2,3]);
set = new Set([...set].map(item=>item+1));
//2.使用Array.from(),转换为数组后,第二个参数进行数据处理,返回新的数组
set = new Set(Array.from(set,item=>item+1));

WeakSet
可用于存储DOM对象。
与Set不同之处

1.成员都是对象,不能使其他类型的值
2.对象都是弱引用,无法引用;不可遍历

WeakSet的属性、方法
**没有size属性、不能遍历

add() //添加
delete() //删除
has() //是否存在

**不用考虑成员对象实例是否删除,不会造成内存泄漏

Map

类似于对象、键值对集合;键的类型不局限于字符串,可以是任意类型。

1.接收数组作为构造函数的参数,数组成员表示键值对的数组。

let items=[["name","123"],["age","34"]];
let map = new Map(items);
//内部操作
/**
	let map = new Map();
	items.forEach((key,value)=>map.set(key,value));
**/
//获取值
map.get("name")   //"123"
//赋值
map.set("name","小李");

1.对相同的键赋值会覆盖之前的值
2.只有对同一个对象的引用才视为同一个键;同样两个值相同的实例视为两个键
3.键和内存地址绑定,只要地址不同就是不同键
4.-0===+0 ;NaN === NaN

Map 属性、方法

set(key,value); //设置值,存在则覆盖原来的值
get(key) //获取值,没有 undefined
has(key) // 是否存在 布尔值
delete(key) //删除 布尔值
clear() //清楚所有成员

遍历操作

keys(); //返回键
values(); //返回值
entries(); //返回键值对     ** 为Map结构默认遍历接口,可省略方法的调用
forEach(); //遍历    参数顺序:键值,键名,集合本身

与其他数据结构互相转换
1.Map转化为数组

使用扩展运算符'<b>...</b>';
[...map]      //
[...map.keys()]

2.数组转Map,直接作为参数给Map构造函数。
3.Map转对象

Map结构的键都是字符串,可以转为对象。
let obj = Object.create(null);
map.forEach((value,key)=>obj[key]=value);

4.对象转Map

//
function objToString(obj){
	let strMap = new Map();
	for(let key of Object.keys(obj)){
		strMap.set(key,obj[key]);
	}
	return strMap;
}
objToString({1:"hello","name":"world"});

5.Map转JSON

1.Map结构键名为字符串,转为对象JSON
JSON.stringify(map);
2.Map结构键名有非字符串,转为数组JSON
JSON.stringify([...map]);

6.JSON转Map

WeakMap
可用于存储DOM对象。

1.只接受对象作为键名(null除外)
2.弱引用,自动回收,防止内存泄漏。
3.无法遍历
4.无法清空

属性、方法

get()
set()
has()
delete()

用途

1.应用于DOM结构,保存状态

let dom = document.getElementById("login");
let domMap = new WeakMap();
domMap.set(dom,{clicked:0});
dom.addEventListener('click',function(){
	let data = domMap.get(dom);
	data.clicked++;
	domMap.set(dom,data);
},false);

2.部署类的私有属性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

heroboyluck

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值