嗨大家好,我是Eric ~
今天我們來談談一個非常實用的主題:如何用 JavaScript 實作集合的基本操作。集合是數學中的一個基本概念,也在程式設計中扮演著重要角色,接下來會講解三種主要的集合操作:聯集、交集和差集。
聯集是指包含所有給定集合的元素(不重複)的集合。
const union = [...new Set([...arr1, ...arr2])];
console.log(union) // [1, 2, 3, 4, 5, 6]
這一行的工作原理是這樣的:...arr1, ...arr2
:這會將 arr1 和 arr2 的所有元素展開。new Set([...arr1, ...arr2])
:這會創建一個新的 Set,並且自動去除任何重複的元素。[...new Set([...arr1, ...arr2])]
:最後,我們用展開運算符將 Set 轉換回一個 Array。
如果你的環境不支持 Set,也可以這樣做:
let result = arr1.concat(arr2.filter((e)=>{
return arr1.indexOf(e) === -1
}))
console.log(result) // [1, 2, 3, 4, 5, 6]
交集是指包含所有在兩個或多個集合中都存在的元素的集合。
const intersect = [...new Set(arr1)].filter(item => arr2.includes(item));
console.log(intersect); // [3, 4, 5]
這裡,我們首先使用 new Set(arr1) 去除 arr1 中可能存在的重複元素,然後再過濾出那些也存在於 arr2 的元素。
let intersect = arr1.filter((e) => {
return arr2.indexOf(e) > -1;
});
console.log(intersect); // [3, 4, 5]
這個版本使用 filter 方法遍歷 arr1,並檢查每個元素是否也存在於 arr2 中(即 arr2.indexOf(e) > -1)。這是一個更直觀的方法來找到兩個數組的交集。
差集是指存在於第一個集合,但不存在於第二個集合中的元素組成的集合。
const difference = union.filter(item => !intersect.includes(item));
console.log(difference); // [1, 2]
let difference = arr1.filter((e) => {
return arr2.indexOf(e) === -1;
});
console.log(difference); // [1, 2]
這個版本同樣使用 filter 方法,但這次我們只保留那些不在 arr2 中的元素(即 arr2.indexOf(e) === -1)。
以上就是如何在 JavaScript 中實作集合的基本操作。這些方法不僅是數學上的基本概念,而且在實際的程式設計問題中也非常有用,這次分享就到這邊,謝謝大家,明天見~