-
Map对象
Map 对象保存键值对,任何值(对象或原始值)都可作为一个键或一个值
-
Maps 与 Object 的区别
- 一个 Object 的键只能是字符串或者 Symbol,但 Map 的键可以是任何值
- Map 中的键是有序的(FIFO(先进先出)原则)
- Map 的键值对个数可以通过 size 属性获取,而 Object 的键值对个数只能手动计算
- Object 都有自己的原型,原型链上的键名可能与自己在对象上设置的键名产生冲突
-
Map 的迭代
-
for...of
//方式1 for(var [key,value] of myMap){ console.log(key+"="+value) } //方式2 for(var [key,value] of myMap.entries()){ console.log(key+"="+value) } //entries方法返回一个新的Iterator对象,它按插入顺序包含了Map对象的每个元素的[key,value]数组 //方式3-->遍历键, keys() 方法放回Map的所有键 for(var key of myMap.keys()){ console.log(key) } //方式4-->遍历值,values() 方法返回Map的所有值 for(var value of myMap.values()){ console.log(value) }
-
foreach()
myMap.forEach(function(value,key){ console.log(key+"="+value) },myMap)
-
-
Map 对象操作
-
Map与Array的转换
Map --> Array
var arr = [['1',2],['2',2]] var myMap = new Map(arr) //{"1" => 2, "2" => 2}
Array --> Map
var myArr = Array.from(myMap) //Array.from()函数可以将一个 Map 对象转化成一个二维键值对数组
-
Map 的合并
var first = new Map([[1,'one'],[2,'two']]) var second = new Map([[3,'three'],[4,'four']]) var myMap = new Map([...first,...second])
-
Map 的克隆
var myMap1 = new Map([[1,'one'],[2,'two']]) var myMap2 = new Map(myMap2) myMap1 == myMap2 //false Map对象构造函数生成实例,迭代出新的对象
-
-
-
Set 对象
Set 对象允许你存储任何类型的唯一值,无论是原始值或是对象引用
let mySet = new Set() mySet.add(1) //Set(1){1} mySet.add(5) //Set(2){1,5} mySet.add(5) //Set(2){1,5} //值的唯一性 mySet.add('some text') //Set(3){1,5,'some text'} //值的多样性 var o = {a:1,b:2} mySet.add(o) //Set(4){1,5,'some text',{...}} mySet.add({a:1,b:2}) //Set(5){1,5,'some text',{...},{...}} 对象之间引用不同不恒等,即使值相同,Set也能存储
-
类型转换
Array --> Set
var mySet = new Set([1,2,3])
Set --> Array
var arr = [...mySet]
String --> Set
var mySet = new Set('hello') //Set(4){'h','e','l','o'}
-
Set 作用
-
数组去重
var mySet = new Set([1,2,3,3,4]) var arr = [...mySet] //[1,2,3,4]
-
交集
var a = new Set([1,2,3]) var b = new Set([4,2,3]) var intersect = new Set([...a].filter(x=>b.has(x))) //Set(2){2,3}
-
并集
var a = new Set([1,2,3]) var b = new Set([4,5,6]) var union = new Set([...a,...b]) //Set(6){1,2,3,4,5,6}
-
差集
var a = new Set([1,2,3]) var b = new Set([4,2,3]) var difference = new Set([...a].filter(x=>!b.has(x))) //Set(1){1}
-
-