js-challenges icon indicating copy to clipboard operation
js-challenges copied to clipboard

数组交集,并集,差集

Open Sunny-117 opened this issue 2 years ago • 6 comments

Sunny-117 avatar Nov 03 '22 08:11 Sunny-117

const arr1 = [1, 2, 3, 4]
const arr2 = [1, 3, 5, 6, 7]

function Union () {
    const args = [].slice.call(arguments)
    const arrs = args.reduce((total,current) => {
        return total.concat(current)
    },[])
    return [...new Set(arrs)]
}
console.log('------')
// 返回传入所有数组的并集
console.log(Union(arr1, arr2))

function intersections () {
    let res
    const args = [].slice.call(arguments).map(e => new Set(e))
    args.slice(1).forEach(e => {
        res = [...new Set([...args[0]].filter(x => e.has(x)))]
    })
    return res
}
console.log('------')
// 返回传入所有数组的交集
console.log(intersections(arr1, arr2, [3]))

function subtraction () {
    const result = []
    let res = []
    const args = [].slice.call(arguments).map(e => new Set(e))
    args.forEach((e, ei) => {
        res = []
        args.forEach((x, xi) => {
            if (ei !== xi) {
                res.push([...new Set([...e].filter(y => !x.has(y)))])
            }
        })
        result.push(res)
    })
    return result
}
console.log('------')
// 返回传入的所有数组相对于其他数组的差集
console.log(subtraction(arr1, arr2, [9, 10, 11]))

qiuye-zhou avatar Nov 04 '22 04:11 qiuye-zhou

const arr1 = [1, 3, 5];
const arr2 = [2, 4, 5, 6];

// 1. 并集
const arr3 = [...new Set(arr1.concat(arr2))];

// 2. 交集
const set = new Set(arr1);
const res = [];
for (let i = 0; i < arr2.length; i++) {
  if (set.has(arr2[i]) && res.indexOf(arr2[i]) === -1) {
    res.push(arr2[i]);
  }
}
console.log(res);

// 3. 差集 这里求的是除了交集之外的
const res2 = [...new Set(arr1.concat(arr2))];
for(let i = 0; i < res2.length; i++){
    if(res.indexOf(res2[i])!== -1) res2.splice(i, 1);
}
console.log(res2);

bearki99 avatar Feb 19 '23 12:02 bearki99

// 1. 并集
const res1 = [...new Set(arr1.concat(arr2))];
console.log(res1)

// 2. 交集
const set = new Set(arr1);
const res2 = [];
for (let i = 0; i < arr2.length; i++) {
  if (set.has(arr2[i]) && !res2.includes(arr2[i])) {
    res2.push(arr2[i]);
  }
}
console.log(res2);

// 3. 差集 这里求的是除了交集之外的
const res3 = res1.filter(item => !res2.includes(item))
console.log(res3);

veneno-o avatar Mar 13 '23 09:03 veneno-o

let arr1 = [1,2,3] let arr2 = [2,3,4]

// 并集 解构+set+解构 let unionArr = [...new Set([...arr1,...arr2])] console.log(unionArr) //[1,2,3,4]

// 交集 let res = arr1.filter(item=>{ return arr2.includes(item) }) console.log(res)

// 差集 arr1-arr2 let ans = arr1.filter(item=>{ return !arr2.includes(item) }) console.log(ans)

AaronKevinAA avatar Apr 04 '23 11:04 AaronKevinAA

let arr1 = [1, 2, 3, 4];
let arr2 = [3, 4, 5, 6];

// 并集
let union = [...new Set([...arr1,...arr2])];
console.log(union); // 输出:[1 ,2 ,3 ,4 ,5 ,6]

//交集
let intersection = arr1.filter(x => new Set(arr2).has(x));
console.log(intersection); // 输出:[3 ,4]

// 差集 (arr1 相对于 arr2 的差集)
let difference = arr1.filter(x => !new Set(arr2).has(x));
console.log(difference); // 输出:[1 ,2]

kangkang123269 avatar Sep 01 '23 03:09 kangkang123269

const setA = new Set([1, 2, 3]); const setB = new Set([2, 3, 4]);

// 并集 const union = new Set([...setA, ...setB]); console.log(union); // Set {1, 2, 3, 4}

// 交集 const intersection = new Set([...setA].filter(x => setB.has(x))); console.log(intersection); // Set {2, 3}

// 差集 const difference = new Set([...setA].filter(x => !setB.has(x))); console.log(difference); // Set {1}

huxuedong avatar Jan 17 '24 05:01 huxuedong