首页 > 其他 > 详细

Set 和 Map 数据结构

时间:2019-04-20 13:34:41      阅读:110      评论:0      收藏:0      [点我收藏+]

set

ES6 提供了新的数据结构 Set。它类似于数组,但是成员的值都是唯一的,没有重复的值。

Set本身是一个构造函数,用来生成 Set 数据结构。

let set = new Set()
let arr = [2, 1, 3, 2, 4, 5, 2, 1]
arr.forEach(item=>set.add(item))
console.log(set) // Set(5)?{2, 1, 3, 4, 5}

上面代码通过add()方法向 Set 结构加入成员,结果表明 Set 结构不会添加重复的值。

set 还可以接收一个数组(或者具有 iterable 接口的其他数据结构)作为参数,用来初始化。

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

上面代码中,我们使用set实现数组去重

向 Set 加入值的时候,不会发生类型转换,所以5和"5"是两个不同的值。Set 内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),主要的区别是NaN等于自身,而精确相等运算符认为NaN不等于自身。

    let set = new Set()
    let a = NaN;
    let b = NaN;
    set.add(a)
    set.add(b)
    console.log(set) // Set(1)?{NaN}

上面代码中,向set实例添加了两个NaN,但是只加入了一个,这说明在set内部,NaN等于NaN

两个对象总是不相等的

    let set = new Set()
    let a = {};
    let b = {};
    set.add(a)
    set.add(b)
    console.log(set.size) // 2

set实例的属性和方法

属性

  • size:返回set实例的成员总数
  • constructor:构造函数,默认就是set

方法

set实例的方法分为两大类,操作方法(用于操作数据)和遍历方法(用于遍历成员)

  • 操作方法
    • add(value):添加某个值,返回set结构本身
    • delete(value):删除某个值,返回一个布尔值,表示是否删除成功
    • has(value):返回一个布尔值,表示该值是否为set的成员
    • clear():清除所有成员,没有返回值
      let set = new Set()
      set.add(1)
      set.add(2)
      console.log(set)  // Set(2)?{1, 2}
      set.delete(1)
      console.log(set)  // Set(1)?{2}
      console.log(set.has(2))  // true
      set.clear()
      console.log(set)  // Set(0)?{}

    上面代码是set操作方法的实例

Array.from方法可以将set结构转化为数组

    let set = new Set([1,2,3])
    console.log(set)  // ?{1, 2, 3}
    console.log(Array.from(set)) // [1, 2, 3]
  • 遍历操作
    • keys():返回键名的遍历器
    • values():返回键值的遍历器
    • entries():返回键值对的遍历器
    • forEach():使用回调函数遍历每个成员

特别指出的是,set的遍历顺序就是插入顺序。这个特性有时非常有用,比如使用set保存一个回调函数列表,调用时就能保证按照添加顺序调用

keys方法、values方法、entries方法返回的都是遍历器对象。由于set没有键名,只有键值(或者说键值和键名是同一个值),所以keys方法和values方法的行为完全一致。

    let set = new Set([1,2,3])
    console.log(set)  // ?{1, 2, 3}
    for(let item of set.values()){
        console.log(item)  // 1 2 3
    }
    for(let item of set.keys()){
        console.log(item)  // 1 2 3
    }
    for(let item of set.entries()){
        console.log(item) // [1, 1]  [2, 2]  ?[3, 3]
    }

未完。。。

Set 和 Map 数据结构

原文:https://www.cnblogs.com/mengxiangji/p/10740615.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!