Chinaunix首页 | 论坛 | 博客
  • 博客访问: 922177
  • 博文数量: 210
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2070
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-19 21:54
文章分类

全部博文(210)

文章存档

2020年(2)

2019年(18)

2018年(27)

2017年(5)

2016年(53)

2015年(88)

2014年(17)

分类: JavaScript

2018-06-14 10:34:07

ES6 提供了新的数据结构 Set。
特性

似于数组,但它的一大特性就是所有元素都是唯一的,没有重复。

我们可以利用这一唯一特性进行数组的去重工作。

单一数组的去重。

点击(此处)折叠或打开

  1. let set6 = new Set([1, 2, 2, 3, 4, 3, 5])
  2. console.log('distinct 1:', set6)

点击(此处)折叠或打开
输出的结果:distinct 1: Set { 1, 2, 3, 4, 5 }



多数组的合并去重

点击(此处)折叠或打开

  1. let arr1 = [1, 2, 3, 4]
  2. let arr2 = [2, 3, 4, 5, 6]
  3. let set7 = new Set([...arr1, ...arr2])
  4. console.log('distinct 2:', set7)

点击(此处)折叠或打开
输出的结果:distinct 2: Set { 1, 2, 3, 4, 5, 6 }



操作

1.向Set中添加元素。

点击(此处)折叠或打开

  1. let set1 = new Set()
  2. set1.add(1)
  3. set1.add(2)
  4. set1.add(3)
  5. console.log('added:', set1)

点击(此处)折叠或打开
输出的结果:added: Set { 1, 2, 3 }



2.从Set中删除元素。

点击(此处)折叠或打开

  1. let set1 = new Set()
  2. set1.add(1)
  3. set1.add(2)
  4. set1.add(3)
  5. set1.delete(1)
  6. console.log('deleted:', set1)

点击(此处)折叠或打开
输出的结果:deleted: Set { 2, 3 }


3.判断某元素是否存在。

点击(此处)折叠或打开

  1. let set1 = new Set()
  2. set1.add(1)
  3. set1.add(2)
  4. set1.add(3)
  5. set1.delete(1)
  6. console.log('has(1):', set1.has(1))
  7. console.log('has(2):', set1.has(2))

点击(此处)折叠或打开
输出的结果:has(1): false
输出的结果:has(2): true



4.清除所有元素。

点击(此处)折叠或打开

  1. let set1 = new Set()
  2. set1.add(1)
  3. set1.add(2)
  4. set1.add(3)
  5. set1.clear()
  6. console.log('cleared:', set1)

点击(此处)折叠或打开
输出的结果:cleared: Set {}



Set和Array互转

1.数组转Set

点击(此处)折叠或打开

  1. array to set 2: Set { 4, 5, 6 }
  2. array to set 3: Set { 7, 8, 9 }


点击(此处)折叠或打开

  1. let set2 = new Set([4,5,6])
  2. console.log('array to set 1:', set2)

  3. let set3 = new Set(new Array(7, 8, 9))
  4. console.log('array to set 2:', set3)
2.Set转数组

点击(此处)折叠或打开

  1. let set4 = new Set([4, 5, 6])
  2. console.log('set to array 1:', [...set4])
  3. console.log('set to array 2:', Array.from(set4))

点击(此处)折叠或打开

  1. 输出的结果:set to array 1: [ 4, 5, 6 ]
  2. 输出的结果:set to array 2: [ 4, 5, 6 ]

遍历

可以使用Set实例对象的keys(),values(),entries()方法进行遍历。

由于Set的键名和键值是同一个值,它的每一个元素的key和value是相同的,所有keys()和values()的返回值是相同的,entries()返回的元素中的key和value是相同的。


点击(此处)折叠或打开

  1. let set5 = new Set([4, 5, 'hello'])
  2. console.log('iterate useing Set.keys()')
  3. for(let item of set5.keys()) {
  4.   console.log(item)
  5. }

  6. console.log('iterate useing Set.values()')
  7. for(let item of set5.values()) {
  8.   console.log(item)
  9. }

  10. console.log('iterate useing Set.entries()')
  11. for(let item of set5.entries()) {
  12.   console.log(item)
  13. }


点击(此处)折叠或打开

  1. iterate useing Set.keys()
  2. 4
  3. 5
  4. hello

  5. iterate useing Set.values()
  6. 4
  7. 5
  8. hello

  9. iterate useing Set.entries()
  10. [ 4, 4 ]
  11. [ 5, 5 ]
  12. [ 'hello', 'hello' ]

其他特性

在向Set加入值时,Set不会转换数据类型,内部在判断元素是否存在时用的类似于精确等于(===)的方法,“2”和2是不同的,NaN等于其自身。



点击(此处)折叠或打开

  1. let set8 = new Set()
  2. set8.add(NaN)
  3. set8.add(NaN)
  4. console.log('NaN===Nan is true:', set8)

点击(此处)折叠或打开

  1. 输出的结果:NaN===Nan is true: Set { NaN }










阅读(1016) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~