ES6 Map与Set

2020-04-30  本文已影响0人  BlueSkyBlue

Map

Map对象保存键值对,任何值(对象或者原始值)都可以作为一个键或一个值。

Map与Object的区别:

var map = new Map()
map.set('key', 'value')
console.log(map.get('key'))

//键值为对象
var map = new Map()
map.set('key', 'value')
console.log(map.get('key'))

//函数作为键值
var map = new Map()
var func = function () {}
map.set(func, 'function value')
console.log(map.get(func))

//NaN作为键值
var map = new Map()
map.set(NaN, 'not a number')
console.log(map.get(NaN))
var foo = Number('foo')
console.log(map.get(foo))

Map的迭代

var map = new Map()
map.set(0, 'zero')
map.set(1, 'one')

for(var [key, value] of map){
    console.log(key + " = " + value)
}

在以下方法中entries返回一个新的Iterator对象,它按插入顺序包含了Map对象中的每个元素的[key, value]数组。

for(var [key, value] of map.entries()){
    console.log(key + " = " + value)
}

以下方法的keys方法也是返回一个Iterator对象。它按照插入的顺序包含了Map对象中的每个元素的键值。

for(var key of map.keys()){
    console.log(key)
}

以下的values方法也是返回一个Iterator对象。它按照插入顺序包含了Map对象中每个元素的值。

for(var value of map.values()){
    console.log(value)
}

forEach方法

map.forEach(function (key, value) {
    console.log(key + ' = ' + value)
}, map)

Map对象的操作

Map与Array的转换

var arr = [[0, 'zero'], [1, 'one']]
var myMap = new Map(arr)
var outArray = Array.from(myMap)

Map的合并

var map1 = new Map([[0, 'zero'], [1, 'one']])
var map2 = new Map([[2, 'two'], [3, 'three'], [4, 'four']])
var merge = new Map([...map1, ...map2])

Set对象

Set对象允许存储任何类型唯一的值,无论是原始值或者是对象引用。

Set中特殊的值

Set对象存储的值总是唯一的所以需要判断两个值是否恒等。有几种特殊的情况需要特殊对待:

let set = new Set()
set.add(1)
set.add(2)
set.add(3)
console.log(set)

类型转换

Array转Set

var mySet = new Set([1, 2, 3])

Set转Array

var myArray = [...mySet]

String转Set

var strSet = new Set('hello')

Set对象的操作

交集

let set1 = new Set([1, 2, 3])
let set2 = new Set([2, 3, 5])
var insection = new Set([...set1].filter( x => set2.has(x)))

差集

let set1 = new Set([1, 2, 3])
let set2 = new Set([2, 3, 5])
var insection = new Set([...set1].filter( x => !set2.has(x)))
上一篇 下一篇

猜你喜欢

热点阅读