美文网首页
ES6 Map与Set

ES6 Map与Set

作者: BlueSkyBlue | 来源:发表于2020-04-30 15:36 被阅读0次

Map

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

Map与Object的区别:

  • 一个Object的键只能是字符串或者Symbols,但一个Map的键可以是任意的值。
  • Map中的键值是有顺序的(FIFO),而添加到对象中的键则不是。
  • Map的键值对的个数可以从size中获取,而Object中的键值个数只能手动计算。
  • 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对象存储的值总是唯一的所以需要判断两个值是否恒等。有几种特殊的情况需要特殊对待:

  • +0和-0在存储判断唯一性的时候是恒等的,所以不存在重复。
  • undefined和undefined是恒等的,所以不存在重复。
  • NaN和NaN是不恒等的,但是在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)))

相关文章

网友评论

      本文标题:ES6 Map与Set

      本文链接:https://www.haomeiwen.com/subject/elwzwhtx.html