ES6 提供了新的数据结构 Set
特性:类似于数组,但是它的特性是唯一的,可以用此特性,对数组进行去重操作;
单一数组的去重
let set = new Set([1,2,2,3,3]); // Set(3) {1,2,3}
多数组的合并去重
let Arr1 = [1,2,3,4]
let Arr2 = [2,3,4,5]
let set = new Set([...arr1,...arr2]) // Set{1,2,3,4,5}
对象中的扩展运算符(…)用于取出参数对象中的所有可遍历属性,拷贝到当前对象之中
向Set中添加元素
let set1 = new Set()
set1.add(1)
set1.add(2)
console.log(set1) // {1,2,3}
向set 中删除元素
var set1 = new Set();
set1.add(1)
set1.add(2)
set1.delete(1)
console.log(set1) //{2}
判断元素是否存在
let set = new Set()
set.add(1);
set.add(2);
set.delete(1);
set.has(1); //false
set.has(2); //true
清除所有元素
let set = new Set();
set.add(1)
set.clear() //{}
Set和Array互转
1、数组转set
let set1 = new Set([1,2,3]); // Set{1,2,3}
let set2 = new Set(new Array(1,2,3)); // Set{1,2,3}
2、 set 转数组
var set = new Set([1,2,3]);
console.log([...set]); //[1,2,3]
console.log(Array.from(set)); //[1,2,3]
遍历
可以使用set实例对象的keys()、values()、entries()方法进行遍历;
由于Set的键名和键值是同一个值,它的每一个元素的key和value是相同的,所有的keys()和values()返回的值都是相同的,entrise()返回元素中的key和value是相同的。
let set1 = new Set([1,2,'hello'])
for(let item of set1.keys()){
console.log(item); //1,2,'hello'
}
for(let item of set1.values()){
console.log(item); //1,2,'hello'
}
for(let item of set1.entries()){
console.log(item); //[1,1][2,2]['hello','hello']
}
其他特性
在向Set加入值时,Set不会转换数据类型,内部在判断元素是否存在时用的类似与精确等于(===)的方法,“2”和2是不同的,NaN等于自身;
var set = new Set()
set.add(NaN);
set.add(NaN);
console.log(set); //Set {NaN}