在前端开发中,处理数组交集、并集、差集、补集这些操作是很常见的。以下是用 JavaScript 实现的这四个方法:
- 交集(Intersection):返回两个数组中共同存在的元素。
function intersection(arr1, arr2) {const set1 = new Set(arr1);const set2 = new Set(arr2);const result = [];for (const item of set1) {if (set2.has(item)) {result.push(item);}}return result;
}
- 并集(Union):返回两个数组中所有不重复的元素。
function union(arr1, arr2) {const set1 = new Set(arr1);const set2 = new Set(arr2);for (const item of set2) {set1.add(item);}return Array.from(set1);
}
- 差集(Difference):返回在第一个数组中存在,但在第二个数组中不存在的元素。
function difference(arr1, arr2) {const set1 = new Set(arr1);const set2 = new Set(arr2);const result = [];for (const item of set1) {if (!set2.has(item)) {result.push(item);}}return result;
}
- 补集(Complement):通常指的是相对于某个全集的补集。在数组操作中,可以认为补集是相对于并集的差集。即,先求出两个数组的并集,然后分别求每个数组相对于并集的差集。以下示例展示如何求第一个数组相对于两个数组并集的补集。
function complement(arr1, arr2) {const unionArr = union(arr1, arr2);return difference(unionArr, arr1); // 这里求的是 arr1 相对于并集的补集,也可以根据需要求 arr2 的补集
}
注意:补集的定义可能因上下文而异。在上面的示例中,complement
函数求的是第一个数组相对于两个数组并集的补集。如果你需要求第二个数组相对于并集的补集,可以稍微修改该函数。
这些函数都使用了 JavaScript 的 Set
对象来处理数组,因为 Set
对象可以自动去重,并且提供了高效的成员检查方法(has
)。