zoukankan      html  css  js  c++  java
  • ES6,新增数据结构Set的用法

    ES6 提供了新的数据结构 Set。

    特性

    似于数组,但它的一大特性就是所有元素都是唯一的,没有重复。

    我们可以利用这一唯一特性进行数组的去重工作。

    单一数组的去重。

    let set6 = new Set([1, 2, 2, 3, 4, 3, 5])
    console.log('distinct 1:', set6)

    结果:

    distinct 1: Set { 1, 2, 3, 4, 5 }

    多数组的合并去重

    let arr1 = [1, 2, 3, 4]
    let arr2 = [2, 3, 4, 5, 6]
    let set7 = new Set([...arr1, ...arr2])
    console.log('distinct 2:', set7)

    结果:

    distinct 2: Set { 1, 2, 3, 4, 5, 6 }

    操作

    1.向Set中添加元素。

    let set1 = new Set()
    set1.add(1)
    set1.add(2)
    set1.add(3)
    console.log('added:', set1)

    结果:

    added: Set { 1, 2, 3 }

    2.从Set中删除元素。

    let set1 = new Set()
    set1.add(1)
    set1.add(2)
    set1.add(3)
    set1.delete(1)
    console.log('deleted:', set1)

    结果:

    deleted: Set { 2, 3 }

    3.判断某元素是否存在。

    复制代码
    let set1 = new Set()
    set1.add(1)
    set1.add(2)
    set1.add(3)
    set1.delete(1)
    console.log('has(1):', set1.has(1))
    console.log('has(2):', set1.has(2))
    复制代码

    结果:

    has(1): false
    has(2): true

    4.清除所有元素。

    let set1 = new Set()
    set1.add(1)
    set1.add(2)
    set1.add(3)
    set1.clear()
    console.log('cleared:', set1)

    结果:

    cleared: Set {}

    Set和Array互转

    1.数组转Set

    let set2 = new Set([4,5,6])
    console.log('array to set 1:', set2)
    
    let set3 = new Set(new Array(7, 8, 9))
    console.log('array to set 2:', set3)

    结果:

    array to set 2: Set { 4, 5, 6 }
    array to set 3: Set { 7, 8, 9 }

    2.Set转数组

    let set4 = new Set([4, 5, 6])
    console.log('set to array 1:', [...set4])
    console.log('set to array 2:', Array.from(set4))

    结果:

    set to array 1: [ 4, 5, 6 ]
    set to array 2: [ 4, 5, 6 ]

    遍历

    可以使用Set实例对象的keys(),values(),entries()方法进行遍历。

    由于Set的键名和键值是同一个值,它的每一个元素的key和value是相同的,所有keys()和values()的返回值是相同的,entries()返回的元素中的key和value是相同的。

    复制代码
    let set5 = new Set([4, 5, 'hello'])
    console.log('iterate useing Set.keys()')
    for(let item of set5.keys()) {
      console.log(item)
    }
    
    console.log('iterate useing Set.values()')
    for(let item of set5.values()) {
      console.log(item)
    }
    
    console.log('iterate useing Set.entries()')
    for(let item of set5.entries()) {
      console.log(item)
    }
    复制代码

    结果:

    复制代码
    iterate useing Set.keys()
    4
    5
    hello
    iterate useing Set.values() 4 5 hello
    iterate useing Set.entries() [ 4, 4 ] [ 5, 5 ] [ 'hello', 'hello' ]
    复制代码

    其他特性

    在向Set加入值时,Set不会转换数据类型,内部在判断元素是否存在时用的类似于精确等于(===)的方法,“2”和2是不同的,NaN等于其自身。

    let set8 = new Set()
    set8.add(NaN)
    set8.add(NaN)
    console.log('NaN===Nan is true:', set8)

    结果:

    NaN===Nan is true: Set { NaN }

    End

  • 相关阅读:
    [算法] 堆栈
    [刷题] PTA 02-线性结构3 Reversing Linked List
    java IO流 (八) RandomAccessFile的使用
    java IO流 (七) 对象流的使用
    java IO流 (六) 其它的流的使用
    java IO流 (五) 转换流的使用 以及编码集
    java IO流 (四) 缓冲流的使用
    java IO流 (三) 节点流(或文件流)
    java IO流 (二) IO流概述
    java IO流 (一) File类的使用
  • 原文地址:https://www.cnblogs.com/sexintercourse/p/11802400.html
Copyright © 2011-2022 走看看