交、并、补的数学原理十分简单,我不过多解释,使用Map来实现十分方便。就直接上代码了。
function jiao() { // 多个集合的交集
const map = new Map();
const result = [];
const arr = [...arguments]
for (const item of arr) {
item.forEach((item) => {
if (!map.has(item)) {
map.set(item, 1);
} else {
map.set(item, map.get(item) + 1);
}
})
}
for (const [key, value] of map) {
if (value === arr.length)
result.push(key);
}
return result;
}
function bing() { // 多个集合的并集
const map = new Map();
const result = [];
const arr = [...arguments]
for (const item of arr) {
item.forEach((item) => {
if (!map.has(item)) {
map.set(item, 1);
} else {
map.set(item, map.get(item) + 1);
}
})
}
for (const [key, value] of map) {
result.push(key);
}
return result;
}
function cha() { // 多个集合的差集
const map = new Map();
const result = [];
const arr = [...arguments]
for(const item of arr) {
item.forEach((item) => {
if (!map.has(item)) {
map.set(item, 1);
} else {
map.set(item, map.get(item) + 1);
}
})
}
for(const [key, value] of map) {
if(value === 1)
result.push(key);
}
return result;
}
// 测试数据
const a = [1, 2, 3, 4, 6, 7]
const b = [1, 3, 6, 5, 7, 8]
const c = [1, 2, 4, 5, 8, 9]
const d = [1, 2, 4, 5, 8, 10]
const result1 = jiao(a, b, c, d);
const result2 = bing(a, b, c, d);
const result3 = cha(a, b, c, d);
console.log(result1);
console.log(result2);
console.log(result3);
测试结果:
如果有更方便快捷的方式,请大佬不吝赐教!!!