Map 对象
Map 对象保存键值对。任何值(对象或者原始值) 都可以作为一个键或一个值。
Maps 和 Objects 的区别
- 一个 Object 的键只能是字符串或者 Symbols,但一个 Map 的键可以是任意值。
- Map 中的键值是有序的(FIFO 原则),而添加到对象中的键则不是。
- Map 的键值对个数可以从 size 属性获取,而 Object 的键值对个数只能手动计算。
- Object 都有自己的原型,原型链上的键名有可能和你自己在对象上的设置的键名产生冲突。
Map 中的 key
key 是字符串
var myMap = new Map(); var keyString = "a string"; myMap.set(keyString, "和键‘a string‘关联的值"); myMap.get(keyString);
key 是对象
var myMap = new Map(); var keyObj = {}, myMap.set(keyObj, "和键 keyObj 关联的值"); myMap.get(keyObj);
key 是函数
var myMap = new Map(); var keyFunc = function () {},
key 是 NaN
var myMap = new Map(); myMap.set(NaN, "not a number"); myMap.get(NaN);
虽然 NaN 和任何值甚至和自己都不相等(NaN !== NaN 返回true),NaN作为Map的键来说是没有区别的。
Map 的迭代
对 Map 进行遍历,以下两个最高级。
for...of
var myMap = new Map(); myMap.set(0, "zero"); myMap.set(1, "one");
forEach()
var myMap = new Map(); myMap.set(0, "zero"); myMap.set(1, "one");
Map 对象的操作
Map 与 Array的转换
var kvArray = [["key1", "value1"], ["key2", "value2"]];
Map 的克隆
var myMap1 = new Map([["key1", "value1"], ["key2", "value2"]]); var myMap2 = new Map(myMap1); console.log(original === clone);
Map 的合并
var first = new Map([[1, ‘one‘], [2, ‘two‘], [3, ‘three‘],]); var second = new Map([[1, ‘uno‘], [2, ‘dos‘]]);
Set 对象
Set 对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
Set 中的特殊值
Set 对象存储的值总是唯一的,所以需要判断两个值是否恒等。有几个特殊值需要特殊对待:
- +0 与 -0 在存储判断唯一性的时候是恒等的,所以不重复;
- undefined 与 undefined 是恒等的,所以不重复;
- NaN 与 NaN 是不恒等的,但是在 Set 中只能存一个,不重复。
代码
let mySet = new Set(); mySet.add(1);
类型转换
Array
Set 对象作用
数组去重
var mySet = new Set([1, 2, 3, 4, 4]); [...mySet];
并集
var a = new Set([1, 2, 3]); var b = new Set([4, 3, 2]); var union = new Set([...a, ...b]);
交集
var a = new Set([1, 2, 3]); var b = new Set([4, 3, 2]); var intersect = new Set([...a].filter(x => b.has(x)));
差集
var a = new Set([1, 2, 3]); var b = new Set([4, 3, 2]); var difference = new Set([...a].filter(x => !b.has(x)));
ES6 Map
原文:https://www.cnblogs.com/zouhong/p/11782387.html