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
helloiterate useing Set.values()
4
5
helloiterate 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

转载于:https://www.cnblogs.com/kongxianghai/p/7250248.html

ES6,新增数据结构Set的用法相关推荐

  1. 重温ES6核心概念和基本用法

    ES6在2015年6月就得以批准,至今已两年了.近一年多以来陆续看过很多ES6的资料,工作项目中也逐步的用上了很多ES6的特性(let,const,promise,Template strings,C ...

  2. 第十六节:ES6新增的 Set 和 WeakSet 是什么东西?

    题外话:往后的章节,跟前面的章节联系越来越紧密,很多知识的讲解建立在前面章节的学习基础上,如果是新来的同学,建议从第一节学起.如果是忘记了前面的内容,前端君也会在适当的时候,加上跳转链接. 什么是Se ...

  3. JS的ES5和ES6新增的方法(重点)

    ES5 EcmaScript5 严格模式和高阶函数 严格模式 1.全局严格 函数外的是全局 2.局部严格 函数内部的是局部 使用严格模式 "use strict" 必须放在代码的第 ...

  4. ES6新增语法与内置对象扩展

    技术交流QQ群:1027579432,欢迎你的加入! 欢迎关注我的微信公众号:CurryCoder的程序人生 1.什么是ES6 ES的全称是ECMAScript,它是由ECMA国际标准化组织制定的一项 ...

  5. 【ES6】JS类的用法class

    [ES6]JS类的用法class 一.概述 二.构造函数constructor 三.静态方法与静态变量 查看更多ES6教学文章: 参考文献 引言:由于JS之前一直没有特有的class来定义类的语法,E ...

  6. ES6 let与const基础用法笔记

    ES2015(ES6)新增了两个JS关键字:let和const.主要是用来变量的声明. 2.let 用法示例 { let score=100; alert(score); } let 特性 代码块内有 ...

  7. H5新增、CSS3以及ES5、ES6新增特性

    1.H5新增 新增特性:语义化标签.音视频处理API.canvas.拖拽释放API.history API.地理位置API.webSocket.web存储的localStorage和SessionSt ...

  8. 谈谈ES6新增了哪些特性

    一.什么是ES6? ES全称为ECMAScript,它是由国际标准化组织ECMA(全称:European Computer Manufacturers Association)欧洲计算机制造商协会制定 ...

  9. ES6新增数据类型:Symbol

    [学习es6新增的数据类型 Symbol] 1.symble 的作用 symbol 是 es6 新增的一个基本的数据类型,定义唯一值的:一般用于给对象添加私有属性. 2.symble 的用法 < ...

最新文章

  1. SystemCenter2012SP1实践(6)SCVMM管理XenServer
  2. matlab中antoine方程应用,五参数antoine方程
  3. 机房布线的最高境界......
  4. VS 2017 安装测试
  5. velocity 的 escape实现
  6. 曹大带我学 Go(8)—— 一个打点引发的事故
  7. python注册用户名和密码登录_python实现自动登录需要用户名和密码的网站
  8. 集成方法Ensemble Method(bagging, AdaBoost)
  9. 支付宝当前最新版集成2.1.2版本
  10. jsp中的url拼接的参数传递到controller乱码_Spring MVC中的拦截器
  11. java字符串反转及替换_Java圆括号翻转字符串
  12. redis学习篇(九)-----高级特性之事务处理
  13. 电子系统综合设计作业笔记
  14. 萤石云全栈开放,亿级终端背后的萤石云平台突显硬核“软”实力
  15. 分辨率和比例尺换算 resolution/scale
  16. Elasticsearch7.5配置IK中文分词器+拼音分词
  17. Javascript构建Bingo卡片游戏
  18. 阿里云APP产品功能及使用介绍
  19. gimp: 如何透明化背景
  20. App内购项目的App Store推广

热门文章

  1. android 在一个Activity(A)中结束另一个Activity(B)
  2. 集成ACEGI 进行权限控制
  3. 详述@ResponseBody和@RequestBody注解的区别
  4. cscope使用技巧
  5. Linux下Sniffer程序的实现
  6. make 学习体会(一)
  7. 《Android深度探索(卷1):HAL与驱动开发》——6.4节使用多种方式测试Linux驱动...
  8. WPF Wonders: Transformations (and Robots!)
  9. 使用PostSharp开始AOP
  10. SVN在centos5.4的安装步骤: