zoukankan      html  css  js  c++  java
  • es6数组去重

    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 }
  • 相关阅读:
    EntityFramework优缺点
    领导者与管理者的区别
    七个对我最好的职业建议(精简版)
    The best career advice I’ve received
    Difference between Stored Procedure and Function in SQL Server
    2015年上半年一次通过 信息系统项目管理师
    Difference between WCF and Web API and WCF REST and Web Service
    What’s the difference between data mining and data warehousing?
    What is the difference between a Clustered and Non Clustered Index?
    用new创建函数的过程发生了什么
  • 原文地址:https://www.cnblogs.com/guidan/p/9870373.html
Copyright © 2011-2022 走看看