JavaScript 从浅入深 100 题训练计划--(22)数组交集 / 并集 / 差集

题目:实现数组的交集、并集、差集(对称差集)

intersection([1,2,3], [2,3,4]) // [2,3]
union([1,2,3], [2,3,4]) // [1,2,3,4]
difference([1,2,3], [2,3,4]) // [1]

 

 1 const A = [1, 2, 3, 4, 5];
 2 const B = [4, 5, 6, 7, 8];
 3 
 4 function intersection(arr1, arr2) {
 5   const list = new Set(arr2);
 6   return arr1.filter(item => list.has(item))
 7 }
 8 
 9 function union(arr1, arr2) {
10   return [...new Set([...arr1, ...arr2])]
11 }
12 
13 // 不去重的版本
14 const result1 = A.filter(item => new Set(B).has(item));
15 // [4, 5]  ← 正好没重复,但如果 A = [1,1,2,4,5],会返回 [1,1,4,5]
16 
17 // 去重的版本(结果也是 Set)
18 function intersectionUnique(arr1, arr2) {
19   const set2 = new Set(arr2);
20   return [...new Set(arr1.filter(item => set2.has(item)))];
21 }
22 
23 
24 function difference(arr1, arr2) {
25   const list = new Set(arr2);
26   return arr1.filter(item => !list.has(item))
27 }
28 
29 function symmetricDifference(arr1, arr2) {
30   const list1 = new Set(arr1)
31   const list2 = new Set(arr2)
32 
33   return [
34     ...arr1.filter(item => !list2.has(item)),
35     ...arr2.filter(item => !list1.has(item)),
36   ]
37 }
38 
39 class ArraySet {
40   // 交集
41   static intersection(...arrays) {
42     if (arrays.length === 0) return [];
43     return arrays.reduce((a, b) => a.filter(x => b.includes(x)));
44   }
45 
46   // 并集
47   static union(...arrays) {
48     return [...new Set(arrays.flat())];
49   }
50 
51   // 差集 (a - b)
52   static difference(arr1, arr2) {
53     const set2 = new Set(arr2);
54     return arr1.filter(x => !set2.has(x));
55   }
56 
57   // 对称差集
58   static symmetricDifference(arr1, arr2) {
59     return [
60       ...arr1.filter(x => !arr2.includes(x)),
61       ...arr2.filter(x => !arr1.includes(x))
62     ];
63   }
64 
65   // 判断是否子集
66   static isSubset(arr1, arr2) {
67     const set2 = new Set(arr2);
68     return arr1.every(x => set2.has(x));
69   }
70 }
71 
72 console.log(intersection(A, B), 'key', union(A, B), result1, intersectionUnique(A, B), difference(A, B), difference(B, A), symmetricDifference(A, B))

 

posted @ 2026-09-02 16:31  小新的蜡笔  阅读(3)  评论(0)    收藏  举报