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 }
  • 相关阅读:
    7.JavaScript-Promise的并行和串行
    6.Javascript如何处理循环的异步操作
    5.Javascript闭包得实现原理和作用
    4.Javascript中实现继承的几种方法及其优缺点
    3.Javascript实现instanceof
    BEF
    ant-vue Table组件selectedRows翻页后不保留上一页已选
    js 构造函数、继承
    Vue全局注册组件
    react迷惑的点(一)
  • 原文地址:https://www.cnblogs.com/guidan/p/9870373.html
Copyright © 2011-2022 走看看