let a = [1,2,3], b= [2, 4, 5];
1.差集
(a-b 差集:屬於a但不屬於b的集合) a-b = [1,3]
(b-a 差集:屬於b但不屬於a的集合) b-a = [4,5]
1) 第一種解決方案: filter+includes
let difference = a.concat(b).filter(v => !a.includes(v)) console.log(difference) //[4,5]
2) 第二種解決方案:Set+Array.from
ES6提供了新的數據結構Set。它類似於數組,但是成員的值都是唯一的,沒有重復的值。
Set本身是一個構造函數,用來生成Set數據結構。
Set類似於數組,區別在於它所有的成員都是唯一的,不會有重復的值。
Set是一個新的數據結構。
Array.from() 方法可以將 Set結構轉為數組。
由於key不能重復,所以,在Set種,沒有重復的key。要創建一個Set,需要提供一個Array作為輸入,或者直接創建一個空Set。
var s1 = new Set(); //空Set var s2 = new Set([1,2,3]); //含1,2,3
重復元素在Set種自動被過濾:
var s = new Set([1,2,3,3,'3']); s; // Set {1,2,3,"3"}
向Set加入值的時候,不會發生類型轉換,所以3和'3'是不同的值。
注意數字3和字符串'3'是不同的元素。
new Set的作用是可以將傳入的Array去重。
Array.from() 的作用是可以將 Set結構轉為數組。
let aSet = new Set(a) let bSet = new Set(b) let difference = Array.from(new Set(a.concat(b).filter( v => !aSet.has(v) ))) console.log(difference) //[4,5]
3) 第三種解決方案:filter+indexOf
2.交集
1) 第一種解決方案:filter+includes