Set
是 ES6 提供的一种新的数据结构,类似于数组,但是成员都是唯一的,不重复的特点,因此可以通过Set
轻松实现对数组的 去重、交、并、补等操作。
属性方法如下:
interface Set {
add(value): this;
clear(): void;
delete(value): boolean;
forEach(callbackfn: (value, value2, set: Set) => void, thisArg?: any): void;
has(value): boolean;
readonly size: number;
}
根据Set
的特点,有很多场景可以通过Set
快速实现。
去重
let arr1 = [1, 2, 3, 4, 5, 6, 7, 4, 3, 2, 1];
// 去重
let newArr = [...new Set(arr1)];
console.log(arr1); // [LOG]: [ 1, 2, 3, 4, 5, 6, 7, 4, 3, 2, 1 ]
console.log(newArr); // [LOG]: [ 1, 2, 3, 4, 5, 6, 7 ]
交集、并集、补集
let arr1 = [1, 2, 3, 4, 5];
let arr2 = [3, 4, 5, 6, 7];
let arr1_set = new Set(arr1);
let arr2_set = new Set(arr2);
// 交集
let intersectionArr = [...arr1_set].filter(val => arr2_set.has(val));
console.log(intersectionArr ); // [LOG]: [ 3, 4, 5]
// 并集
let unionArr = [...new Set([...arr1, ...arr2])];
console.log(unionArr ); // [LOG]: [ 1, 2, 3, 4, 5, 6, 7 ]
// 补集
let complementaryArr = [...arr1_set].filter(val => !arr2_set.has(val));
console.log(complementaryArr ); // [LOG]: [ 1, 2 ]