ES6中 Map和Set

233 阅读2分钟

在es6中新增了两个对象 Map和Set

Map也是键值对一个集合,它的键可以是任意值 Map对象和Object的区别:

  1. Map对象的键可以是任意值,Object的键只能是字符串或者Symbols
  2. Map对象的键值个数可以从size属性中获取,而Object的键值个数只能通过计算得到
  3. Map中的键值是有序的,而Object中的键值则不是

Map的方法

    // 初始化一个Map对象
    let map = new Map()
    // set插入一个键值,返回该Map对象
    map.set('one', 1)
    
    // map的size属性获取Map对象中的键值对个数
    console.log(map.size) // 1
    
    // get获取 map 中的键对应的值
    console.log(map.get('one')) // 1
    
    // has 判断Map对象中是否存在该键对应的值
    console.log(map.has('one')) // true
    
    // 删除Map对象中键对应的键值对,删除成功则返回true,否则返回false
    console.log(map.delete('one')) // true
    
    // keys和values方法,返回键和值的Iterator对象
    map.keys() // MapIterator {'one'}
    map.values() // MapIterator {1}

Map的键可以是任意值

    // key是字符串
    let map = new Map()
    const keyString = 'two'
    map.set(keyString, 2)
    
    // key是函数
    let map = new Map()
    const keyFunction = function () {}
    map.set(keyFunction, 'keyFunction')
    map.get(keyFunction) // 'keyFunction'
    map.get(function () {}) // undefined
    
    // key是对象
    let map = new Map()
    const keyObject = {}
    map.set(keyObject, 'keyObject')
    map.get(keyObject) // 'keyObject'
    map.get({}) // undefined
    // 当key为对象时,只有传入对象的引用才能获取到对应的值

对Map对象的迭代方法

    let map = new Map()
    map.set(1, 'one')
    map.set(2, 'two')
    for (const [key, value] of map) {
        console.log(key + '--' + value)
    }
    // 1--one  2--two
    
    map.forEach(function(key, value){
        console.log(key + '---' + value)
    })
    // 1---one  2---two

Set对象 Set可以存任意类型的唯一值,不管是对象引用还是字符串 特殊情况:

  1. +0和-0在判断唯一性的时候是相等的,所以在Set中不会重复
  2. undefined和undefined是恒等的,所以不会重复
  3. NaN和NaN虽然是不恒等的,但是在Set中只能存在一个 Set的方法:
    let mySet = new Set()
    // 添加元素
    mySet.add('one')
    
    // 判断是否有该元素
    mySet.has('one')
    
    // 删除元素
    mySet.delete('one')

Set的迭代 for..of方法迭代

    let mySet = new Set()
    mySet.add('one')
    mySet.add('two')
    mySet.add('three')
    for (const value of mySet) {
        console.log(value)
    }
    // one two three

Set可用于数组去重

    let array = [1, 2, 2, 3, 4]
    let mySet = new Set(array)
    array = [...mySet]