1. Map和Set是什么?
2. Map和Set与Object和Array有什么区别,为何引入Map和Set?
JS中原来已经存在了数组Array和对象Object,在ES6中又引入了Map和Set。
Map和Set是什么?
1-1 Map
Map是键值对的集合
/*
** 方法
*/
// 创建
var mapA = new Map([["key1","value1"],["key2","value2"]]);
// add
mapA.set("key3","value3"); // 返回新的mapA
// delete
mapA.delete("key1"); // 返回删除结果,true or false,不存在该key则返回false
// get
mapA.get("key3"); // 返回该key对应的value,不存在该key则返回undefinded
// has
mapA.has("key2"); // 返回是否包含该key,true or false,不存在该key则返回false
// others
mapA.toJSON(); // [["key2","value2"],["key3","value3"]]
// clear
mapA.clear(); // 清空mapA
// ??
mapA.entries()
mapA.keys() ; // 返回mapA所有key的Interator
mapA.values(); // 返回mapA所有value的Interator
/*
** 属性
*/
// size
console.log(mapA.size); // 返回map 中key的个数
1-2 Set
Set没有值,是key的集合,key不重复,是存储无重复值的有序列表。
// 创建
var setA = new Set(["key1","key2"]);
// add
setA.add("key3"); // 返回新的setA
// delete
setA.delete("key1"); // 返回删除结果,true or false,不存在该key则返回
// has
setA.has("key2"); // 返回是否包含该key,true or false,不存在该key则返回false
// others
setA.toJSON(); // ["key2","key3"]
// clear
setA.clear(); // 清空setA
// ??
setA.entries()
setA.keys() ; // 返回setA所有key的Interator
/*
** 属性
*/
// size
console.log(setA.size); // 返回set 中key的个数
- Map和Set与Object和Array有什么区别,为何引入Map和Set?
2-1.Map和Set与Object和Array有什么区别
乍看之下,Map和Object差不多,Set和Array差不多
Map&Object
mapA、mapA.keys()、mapA.values()可以使用for of,objectA不可以;
mapA有size属性能立即得到key的个数,objA没有;
objA可以使用for in, mapA不可以
Set&Array
Set只存储key 且key不可重复;
Array 实际是key为连续数字的键值对,value可重复
2-2. 为何引入Map和Set
Map有极快的查找速度;
Set能保证key不重复(与Object.is()结果大致相同,除了+0和-0, set认为+0和-0相同)
tips: 普通for循环效率最高,forEach和for-in次之,for-of效率最低
网友评论