首页 > 编程语言 > 详细

ES6深入浅出-10 ES6新增的数据类型-2.Set与数组去重

时间:2019-11-12 23:05:54      阅读:164      评论:0      收藏:0      [点我收藏+]

一种新的数据类型,它是对象的一种,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给数组去重就可以了。

结束


 

 

ES6深入浅出-10 ES6新增的数据类型-2.Set与数组去重

原文:https://www.cnblogs.com/wangjunwei/p/11845023.html

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