es6-10 set map 数据结构

Set() 的用法

{
    let list = new Set() // 声明一个 set
    // 往 set 增加元素用 add() 方法
    list.add(5)
    list.add(7)
    console.log('size', list.size) // 这里长度用 size 而不能用 length

    let arr = [1,2,3,4,5]
    let list2 = new Set(arr) // Set 把数组 arr 转化成一个集合了, 成为一个 Set 数据类型
    console.log('size', list2.size)

    // 添加一个重复的元素是不会生效的, 这个特性可以用来数组去重
    list2.add(1)
    console.log(list2) // Set(5) {1, 2, 3, 4, 5}
}

使用 Set() 数组去重

PS: 不会做数据类型的转换, 也就是说 1 和 '1' 不会被去重

{
    let arr = [1,2,3,4,1,2]
    let list = new Set(arr)
    console.log(list) // Set(4) {1, 2, 3, 4}

    let arr2 = [1,2,3,4,'1',2]
    let list2 = new Set(arr2)
    console.log(list2) // Set(5) {1, 2, 3, 4, "1"}
}

Set() 的方法 add() has() delete() clear()

{
    let arr = ['add', 'delete', 'clear', 'has']
    let list = new Set(arr)

    // 使用 add() 添加一个元素
    list.add('new')
    console.log(list) // Set(5) {"add", "delete", "clear", "has", "new"}

    // 使用 delete() 删除一个元素
    list.delete('new')
    console.log(list) // Set(4) {"add", "delete", "clear", "has"}

    // 检测 set 集合中有没有指定元素
    console.log(list.has('add')) // true

    // 清空 set 集合
    list.clear()
    console.log(list) // Set(0) {}

}

Set 集合的遍历读取

{
    let arr = ['add', 'delete', 'clear', 'has']
    let list = new Set(arr)

    // set 集合的 key 和 value 是一样的
    for (let key of list.keys()) {
        console.log(key) // add delete clear has
    }
    for (let value of list.values()) {
        console.log(value) // add delete clear has
    }

    list.forEach(item => {
        console.log(item) // add delete clear has
    })
}

WeakSet()

  1. 只能是对象, 其它数据类型都不可以
  2. 是一个弱引用, 不会检测在其它地方是否用过, 意味着不会和垃圾回收机制挂钩
  3. 没有 size 属性
  4. 没有 clear() 方法
  5. 不能遍历
{
    let weakList = new WeakSet()
    let arg = {}
    weakList.add(arg)
    // weakList.add(2) // 报错, 因为不是对象
    console.log('weakList', weakList)
    // for (let v of weakList) {
    //     console.log(v) // 报错, 不能遍历
    // }
}

map()

map 的第一种定义方式

{
    let map = new Map()
    let arr = ['123']

    // map 添加元素是用 set
    map.set(arr, 456) // map 是可以用任何数据类型做 key 的
    console.log('map', map) // Map(1) {Array(1) => 456}

    // map 取值用 get
    console.log(map.get(arr)) // 456
}

map 的第二种定义方式

接受一个数组, 数组的每一个元素还是数组, 必须是这种格式

{
    let map = new Map([['a', 123], ['b', 456]])
    console.log(map) // Map(2) {"a" => 123, "b" => 456}

    // size 检查元素个数
    console.log(map.size) // 2

    // 删除元素
    map.delete('a')
    console.log(map) // Map(1) {"b" => 456}

    // 清空 clear
    map.clear()
    console.log(map) // Map(0) {}
}

map 的遍历和 set 用法是一样的, 不在演示

WeakMap()

  1. 也只能接收对象, 不能是其它数据类型
  2. 没有 size 属性
  3. 也不能使用 clear()
  4. 也不能遍历
原文地址:https://www.cnblogs.com/helzeo/p/11815189.html