js求n个数组对象的并集

117 阅读1分钟
// 求并集的数组对象
let arr = [
    [
        {value: 'a',label: 'a'},
        {value: 'b',label: 'b'},
        {value: 'c',label: 'c'},
    ],
    [
        {value: 'b',label: 'b'},
        {value: 'c',label: 'c'},
    ],
    [
        {value: 'c',label: 'c'},
    ],
];

// 获取并集
function getIntersect(data){
    // 如果传入的求并集数组的项少于2,则无需求并集,并集为空集
    if(data.length < 2){
        return []
    }
    let intersect = data[0];
    // 将i和i+1的集合进行比较,得出并集后,将并集与下次循环的i+1再进行比较,以此类推
    for(let i=0;i<data.length-1;i++){
        intersect = intersect.filter(item => {
            return data[i+1].some(item2 => item.value === item2.value);
        })
    }
    return intersect;
}

getIntersect(arr);