Set本质是ES6中新添加的一种数据类型,在结构上类似于数组,但set集合中的元素具有唯一性。
ES6中内置了Set对象(构造函数),通过new字符进行实例化。
// 创建Set实例
let set1 = new Set(); // {}
let set2 = new Set([1,2,{name:'杰克'}]); // {1,2,{name:'杰克'}}
set1.size; // 0
set2.size; // 3
set2.length; // undefined
let set = new Set();
set.add(['新增元素1']); // {'新增元素1'}
set.add([1,2,3]); // {'新增元素1',[1,2,3]}
set.add({name:'snow'}); // {'新增元素1',[1,2,3],{name:'snow'}}
let set = new Set(['b','c']); // {'b','c'}
set.delete('a'); // false
set.delete('b'); // true
let set = new Set(['b','c']); // {'b','c'}
set.has('a'); // false
set.has('b'); // true
let set = new Set(['b','c']); // {'b','c'}
set.clear(); // undefined
set; // {}
let set = new Set(['a','b','c']); // {'a','b','c'}
set.keys(); // {'a','b','c'}
let set = new Set(['a','b','c']); // {'a','b','c'}
set.values(); // {'a','b','c'}
let set = new Set(['a','b','c']); // {'a','b','c'}
set.entries(); // {'a' => 'a', 'b' => 'b', 'c' => 'c'}
let set = new Set(['a','b','c']);
set.forEach((item,index)=>{
console.log(item,index); // aa bb cc
})
1.由于Set数据类型的键名、键值完全相同,所以以上方法中keys和values的效果完全相同;同理forEach方法中的item和index也等同。
2.Set实例默认可以遍历,所以也可以直接使用for of遍历。
let arr = [1,2,3];
let set = new Set(arr); // {1,2,3}
let set = new Set([1,2,3]); // {1,2,3}
// 方式一 扩展运算符
let arr = [...set]; // [1,2,3]
// 方式二 Array.from方法
let arr = Array.from(set); // [1,2,3]
let arr = [1,1,2,2,3,4,4];
let newArr = [...new Set(arr)]; // [1,2,3,4];
let arr1 = [1,2,3];
let arr2 = [3,4,5];
// 交集
let newArr = [...new Set([...arr1,...arr2])]; // [1,2,3,4,5]
// 并集
let set2 = new Set(arr2);
let newArr = [...new Set(arr1.filter(item => set2.has(item) )]; // [3]
// 差集
let set2 = new Set(arr2);
let newArr = [...new Set(arr1.filter(item => !set2.has(item) )]; // [1,2]