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

  • 相关阅读:
    资深项目经理推荐的几款免费/开源项目管理工具
    内网穿透工具frp简单使用教程
    10部全尺度欧美宫斗剧!献给不甘平淡的你
    Spring Boot后端+Vue前端+微信小程序,完整的开源解决方案!
    搭建Keepalived + Nginx + Tomcat的高可用负载均衡架构
    集成Activiti工作流的J2EE快速开发框架
    国内5大前端团队网站,你了解多少
    5 天 4000 star 的一个爆款开源项目
    「干货」常用的10个网络DOS命令,菜鸟学了变高手
    js自定义正则表达式
  • 原文地址:https://www.cnblogs.com/kongxianghai/p/7250248.html
Copyright © 2011-2022 走看看