干货-es6第二版set,map复习笔记
程序员文章站
2023-12-21 23:53:40
...
本系列复习笔记:
干货-es6第二版“类型”复习笔记(持续更新…)
干货-es6语法风格复习笔记
继续介绍 Set 和 Map
其实这两种新型的数据结构也有很多的相似性,
可以参照第一篇学习类型的方式来学习。
比如两种数据结构都有
1.遍历的操作
2.其实例属性和方法也有类似
3.都可以与其他类型数据进行转换
4.都有weak-弱引用的使用方式
并且他们的区别在于:
Map是键值对的集合,是不是很像对象?区别于对象,Map中“键”的范围可以使用各种类型的值。
所以应用更为广泛,可以操作更多类型的键值对。
Set更像数组类型,但是区别在于,Set中没有重复的元素。
所以在应用中,我们可以尝尝可以使用数组转Set再转回数组的方式,进行去重操作。
一行代码去重:
[...new Set([1,2,3,1,])] // [1,2,3]
与es5的各种去重方式比较,这个方法简便很多
接下来,我们再讨论一下数据类型转换的问题。
与数组的转化:(使用…扩展运算)
//转化为数组
const myMap = new Map()
.set(true, 7)
.set({foo:3}, ['abc']);
[...myMap]
//[[true,7],[{foo:3},['abc']]
//数组转为Map
new Map([
[true,7],
[{foo:3},['abc']]
])
与对象的转化:
//转化为对象(前提是Map键值都是字符串)
let obj = Object.create(null);
for (let [k,v] of strMap) {
obj[k] = v;
}
//对象转为Map
let strMap = new Map();
for (let k in Object.keys(obj)) {
strMap.set(k, obj[k]);
}
与Json的转化:
//转化为Json,两种情况:
JSON.stringfy(map)//1.键名都是字符串:
JSON.string([...map])//2.键名都是非字符串:
//Json转为Map,两种情况
JSON.parse(j)//1.正常情况:后再用对象转Map的方法
new Map(JSON.parse(j))//2.特殊情况,Json都是数组