Set数据结构
*es6方法,Set本身是一个构造函数,它类似于数组,但是成员值都是唯一的。
const set = new Set([1,2,3,4,4]) console.log([...set] )// [1,2,3,4] console.log(Array.from(new Set([2,3,3,5,6]))); //[2,3,5,6]
单一数组的去重:
let set = new Set([1,2,2,2,3]); console.log(set);//Set(3) {1,2,3} console.log([...set]);//[1,2,3]
多数组的合并去重:
let arr1 = [1,2,3,4] let arr2 = [2,3,4,5] let set = new Set([...arr1, ...arr2]); console.log(set);//Set(5) {1,2,3,4,5} console.log([...set]);//[1,2,3,4,5] console.log(Array.from(set))////[1,2,3,4,5]
操作:
1、向Set中添加元素:
let set1=new Set(); set1.add(1); set1.add(2); console.log(set1);//Set(2) {1,2}
2、从set中删除元素;
var set1 = new Set(); set1.add(1); set1.add(2); set1.delete(1); console.log(set1);//Set(1) {2}
3、判断某元素是否存在;
let set = new Set(); set.add(1); set.add(2); set.delete(1); console.log(set.has(1)); //false console.log(set.has(2)); //true
4、清除所有元素;
let set = new Set(); set.add(1); set.clear(); console.log(set); //Set(0) {}
Set和Array互转
1、数组转Set
let set1 = new Set([1,2,3]); console.log(set1);//Set(3) {1, 2, 3} let set2 = new Set(new Array(1,2,3)); console.log(set2)//Set(3) {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(1) {NaN}