一、Map
1、概念:Map用来保存键值对,类似于字典类型。任意值(对象或者原始值)都可以作为一个键或者一个值。
2、Maps 和 Objects 用法比较
Object对象的键只能是字符串或者 Symbols类型,但Map对象的键可以是任意值。
Map 中的键值是有序的(FIFO 原则),而添加到Object中的键则不是。
Map 的键值对个数可以根据 size 属性获取,而 Object 的键值对个数只能手动计算。
Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。
3、用法示例
3.1定义
var map= new Map();
myMap.set(name, "小明"); //键值是字符串
myMap.get(name); // 小明
var map= new Map();
var keyobj={};
map.set(keyobj, "小明"); //键值是对象
map.get(keyobj); // 小明
var map= new Map(); //键值是函数
var keyfunc=function() {};
map.set(keyfunc, "小明");
map.get(keyfunc); // 小明
var map= new Map(); //键值是NaN
map.set(NaN, "小明");
map.get(NaN); // 小明
3.2 遍历用法
var map = new Map();
map.set(0, "小明");
map.set(1, "小王");
//for...of
for (var [key, value] of myMap) {
console.log(key + " = " + value);
}
// forEach()
myMap.forEach(function(value, key) {
console.log(key + " : " + value);
}, myMap)
3.3 Map对象操作
var arr = [["name", "小明"], ["age", 50]];
var map = new Map(arr);
// Map 构造函数可以将一个 二维 键值对数组转换成
一个 Map 对象
var outArray = Array.from(map);// 使用 Array.from 函数可以将一个 Map 对象转换成一个二维键值对数组
var map2=new Map(map);//Map拷贝功能
var map3=new Map([map,map2]);//合并两个 Map 对象时,如果有重复的键值,则后面的会覆盖前面的
console.log(map);
二、Set对象
1、概念:Set对象用来存储任意类型的唯一值。
特殊情况:
1、+0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复;
2、undefined 与 undefined 是恒等的,所以不重复。
3、NaN 与 NaN 是不恒等的,但是在 Set 中只能存一个。
2、用法示例
let mySet = new Set();
mySet.add(1);
mySet.add(5);
mySet.add(5);
mySet.add("some text");
console.log(mySet);
var mySet = new Set(["小明", "小王", "小张"]); //数组转set
var mySet = new Set('小明');//字符串转set
var mySet = new Set([1, 2, 3, 4, 4]);// [1, 2, 3, 4]
//并集
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var union = new Set([...a, ...b]); // {1, 2, 3, 4}
//交集
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var intersect = new Set([...a].filter(x => b.has(x))); // {2, 3}
// 差集
var a = new Set([1, 2, 3]);
var b = new Set([4, 3, 2]);
var difference = new Set([...a].filter(x => !b.has(x))); // {1}