es6学习:Set和Map

1. Set

      es6 提供了新的数据结构 Set(集合),它类似于数组(但不是数组,需要转化),但成员的值是唯一的(可以达到数组去重的效果),集合实现了iterator接口,所以可以使用 扩展运算符 和 for...of 进行遍历。

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

      (== 用于比较、判断两者相等(只比较值),比较时可自动换数据类型;=== 用于(严格)比较、判断两者(严格)相等,不会进行自动转换,要求进行比较的操作值和数据类型必须一致,否则返回flase。)

      比较算法SameValueZero,它与SameValue的区别主要在于0与-0是否相等。在SameValueZero中0与-0相等,在SameValue中0与-0不等,会返回false。

      集合的属性和方法:

  • size    返回集合的元素个数
  • add    增加一个新元素,返回当前集合
  • delete    删除元素,返回 Boolean 值
  • has    检测集合中是否包含某个元素,返回 Boolean 值
  • clear    清空操作,返回undefined
    let s2 = new Set([1, 2, 3, 4, 5, 5, 6])
    console.log(s2)

    // 元素个数
    console.log(s2.size) // 6
    // 添加元素
    s2.add(4) // 1 2 3 4 5 6
    // 删除元素
    s2.delete(5) // 1 2 3 4 6
    // 检测
    console.log(s2.has(4), s2.has(5)) // true false
    // 清空
    // s2.clear() // 空了
    for( let s of s2) {
      console.log(s) // 1 2 3 4 6
    }

       有关集合的实现以及结果展示:

    // 集合的常见操作
    let arr = [56, 34, 78, 23, 56, 90, 92, 17, 23]
    let arr2 = [34, 78, 45, 23, 53, 71, 66, 88]
    // 1. 数组去重
    let result1 = [...new Set(arr)]
    // 2. 交集
    // 先去重 再通过 filter 和 Set的has方法 进行筛选
    let result2 = [...new Set(arr)].filter( item => new Set(arr2).has(item) )
    // 3. 并集 先合并,再去重,再转化为数组
    let result3 = [...new Set([...arr, ...arr2])]
    // 4. 差集
    let result4_1 = [...new Set(arr)].filter( item => !(new Set(arr2).has(item)) )
    let result4_2 = [...new Set(arr2)].filter( item => !(new Set(arr).has(item)) )
    console.log(result1, result2, result3, result4_1, result4_2)

2. Map

      es6 提供了Map数据结构,它类似于对象,也是键值对的集合。但是“键”的范围不限于字符串,各种类型的值(包括对象)都可以当作键。Map也实现了iterator接口,所以可以使用 扩展运算符 和 for...of 进行遍历。

      Map的属性和方法:

  • size    返回Map的元素个数
  • set    增加一个新元素,返回当前Map
  • get    返回键名对象的键值
  • has    检测Map中是否包含某个元素,返回 Boolean 值
  • clear    清空操作,返回undefined
    // Map
    let m = new Map()
    // 添加元素
    m.set('name', '梅干菜包子') // 键是字符串  值为字符串 
    m.set('eat', function () {
      conso.log('早晨吃梅干菜包子!')
    }) // 键是字符串  值为function
    let key = {
      person: 'FOOD'
    }
    m.set(key, ['菌菇包子', '白菜豆腐包子', '粉丝牛肉包子']) // 键是对象  值为数组
    console.log(m.size) // 3
    // 获取
    console.log(m.get('name')) // 梅干菜包子
    console.log(m.get(key)) // ["菌菇包子", "白菜豆腐包子", "粉丝牛肉包子"]
    // 删除
    // m.delete(key)
    // 清空
    // m.clear()
    // 遍历
    for (let v of m) {
      console.log(v) // 结果是数组形式; 下标 0 为key值 , 下标 1 为value值
    }

 


下一篇 ... ...

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值