ES6深入浅出-10 ES6新增的数据类型-2.Set与数组去重
一种新的数据类型,它是对象的一种,Set,很像数组,又不是数组。
Set 类型 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Set
Set
对象允许你存储任何类型的唯一值,无论是原始值或者是对象引用。
如果里面有重复的会自动去重。set可以理解为去重之后的数组,永远不允许有重复的元素存在。
无论是原始值还是对象引用
如果有重复的字符串,也会去重。
null和undefined也会去重了。
定义一个空对象a。set里面加入重复的a对象 也会去重。
它只会对引用去重
如果是两个不同的空对象。a和b是不同的,所以不会去重。所以它是同一个引用去重,不同的引用,没有去重。
在new set之前的js是怎么去重的
常见的面试题,数组去重。
把array[i]当做数组hash的属性名。如果有重复的就是把重复的属性名再次编程true
打印出来的结果。
然后把hash再循环一遍,上面是遍历数字,下面是遍历对象
输出 结果
思路就是:把数组放在一个对象里面,一有就设置为true,最后把对象的key都打出来。
这个方法的缺点:打印的值编程了字符串。
在ES6之前,js的对象只支持一种下标,就是字符串。
假设中间有个字符串的4,和后面的数字4。
对于我们这个函数而言,数字4和字符串4没有区别。下标最终都是字符串。
定义hash一个下标为数字4的,最终也会转换为字符串
再来一个下标为字符串4的,hash的值还是只有4的下标。所以不管你是数字还是字符串,最终都是字符串
用对象的下标来去重最大的问题是:只能统计字符串。一旦他们两个转化为字符串无法区分。就做不到了。
如果数字内有个对象,怎么去重?
数组内加上对象,再去重。出现这种问题的原因是下标只支持字符串。所以当你以这个对象下标的时候
所有对象编程字符串都是一个类似[object]这样的字符串。
声明一个空对象,按后,a.toString打印出来。对象编程字符串的结果。
让js发现对象的下标是对象的时候,就会调用这个对象的toString()方法
所以另外一个缺点是无法统计对象
新的算法ES6的set
直接return一个new set然后把array传递进去。打印出来的结果是一个Set对象。
把set转换成数组。Array.form会接收任意一个东西,并尝试把它变成一个数组。
先用new set()去重,然后转换成一个array数组。
array.form有一种简单的写法。使用展开操作符。
API
new Set然后add往里面塞东西,重复的不会加进去。
循环set用for of来迭代
set平时写代码不常用
只需要知道怎么用set给数组去重就可以了。
结束
原文地址:https://www.cnblogs.com/wangjunwei/p/11845023.html
- 滑动开关按钮SlideSwich
- 全栈工程师的百宝箱:图形工具篇
- 获取手机端验证码
- RESTful WCF
- android顶部导航条
- AggregateCacheDependency、CacheDependency、SqlCacheDependency Asp.net 2.0和Sql Server的缓存管理和使用ObjectBuil
- slidingmenu开源效果
- MySQL 5.0和PostgreSQL 8.1
- Python入门讲解
- DDM: 一个简洁的前端领域模型库
- 前后端分离之领域模型的思考
- 类选择符和ID选择符
- 仿网易新闻页面效果
- VS.Net 2005 Design-Time Integration
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 给“小白”漫画+图示讲解MyBatis原理,就问香不香!
- webClientTest 编写单元测试类
- 关于gorm多表联合查询(left join)的小记
- UnicodeEncodeError: 'latin-1' codec can't encode character 'u2026' in position 30: ordinal not i...
- Oracle GoldenGate 19 Microservices完整高可用安装、配置与测试
- 爬虫小白:11.scrapy框架(六) _媒体管道
- R基于TCGA数据画生存曲线
- 爬虫小白:01-认识爬虫
- 04.BeautifulSoup使用
- 04.Xpath的使用
- 微服务[学成在线] day14:媒资管理
- Pandas 数据结构
- 微服务[学成在线] day15:媒资管理系统集成
- 时间序列
- 数据分组