ES6-Set的数据结构
基本用法
-
ES6 提供了新的数据结构 Set。它类似于数组,但是不同的是它的成员值都是唯一的,不会添加重复的值。
const s = new Set(); [2, 2, 3 , 4, 5,5].forEach(x => s.add(x)); //这句代码的意思是:使用forEach遍历[2, 3, 5, 4, 5, 2, 2]这个数组,使得数组的每一项都通过s.add()加入到s中 for (let i of s) { console.log(i); } //输出结果: 2 3 5 4 -
Set函数可以接受一个数组作为参数,用来初始化
const set = new Set([1, 2, 3, 4, 4]); [...set] //输出结果: [1, 2, 3, 4] //...是展开运算符 const items = new Set([1, 2, 3, 4, 5, 5, 5, 5]); items.size //输出结果: 5 -
用Set数据结构初始化数组可以去除数组中重复的元素
[...new Set('ababbc')].join('') //输出结果: "abc" //join()方法是用于将数组中的所有元素都放入一个字符串,元素是通过指定的分隔符进行分隔的。 //语法:arrayObject.join(separator) //返回值:返回一个字符串。该字符串是通过把 arrayObject 的每个元素转换为字符串,然后把这些字符串连接起来,在两个元素之间插入 separator 字符串而生成的(若省略该参数,则使用逗号作为分隔符)。 var arr=new Array(3) arr[0]="q" arr[1]="a" arr[2]="z" console.log(arr.join()) //输出结果:"q,a,z" console.log(arr.join('l')) //输出结果:"qlalz"
Set实例上的的属性和方法
Set本身是没有提供任何方法的。但Set.prototype(Set的原型)属性对象上提供了若干的属性和方法,用于在Set实例上使用。
1. Set实例的属性:
Set.prototype.constructor:构造函数,默认就是Set函数。Set.prototype.size:返回实例的成员总数var v=new Set([1,2,3]); console.log(v.size) //输出结果:3
2. Set实例的的方法:
Set.prototype.add(value): 添加某个值,返回Set结构本身Set.prototype.delete(value): 删除某个值,成功则返回true,反之返回false。Set.prototype.has(value): 判断值是否在当前Set结构中,在则返回true,反之返回false。Set.prototype.clear(): 清除所有成员,没有返回值。
var v=new Set([1,2,3]);
v.add(4)
console.log(...v)
//输出结果:1 2 3 4
v.delete(1)
console.log(...v)
//输出结果:2 3 4
console.log(v.has(3))
//输出结果:true
v.clear()
console.log(v.size)
//输出结果:0
注意:
1. Set实例是一个不重复的值的集合,键名和值是一致的。
2. Set不能通过下标访问数据,因为集合里面元素无序。所以遍历Set中的数据一般使用for of或者forEach方法。
3. 向Set添加值的时候,不会发生类型转换,所以 5 和 “5”是不同的值。
4. 在Set内部判断两个值是否不同,使用的算法叫做“Same-value-zero equality”,它类似于精确相等运算符(===),和它主要的区别是向 Set 加入值时认为NaN等于自身,而精确相等运算符认为NaN不等于自身。
5. 还有,在set中两个对象是不相等的。原因: 因为引用数据类型比较的是引用,而不是值。不同的对象引用地址也不同,所以{}==={}的结果为false。