js 获取多个数组的交集

取多个数组的交集

方法一
// 1、设置一个变量minArr,表示所有数据里最小长度的数组
// 后面通过这个最小长度数组的数据和其他的数据比较取交集的数据
function qjj(arr) {
    let minArr = [],
        defaultArr = [];
    arr.forEach(i => {
        minArr = i;
        if (i.length < minArr.length) {
            minArr = i;
        }
    });
    minArr.forEach(i => {
        state = [];
        // 2、这里因为要知道arr每个数组里是否包含的minArr当前循环的值i,
        // 所有设置了一个状态的数组state=[],
        // arr里的数组j如果包含i就往state里面push一个true,否则push一个false
        arr.forEach(j => {
            if (j.includes(i)) {
                state.push(true);
            } else state.push(false);
        });
        // 3、最后一步通过对state状态数组对比每一个值是不是都是true
        // 来判断是否把这个i存进defaultArr交集的数组里
        const status = state.every(i => {
            return i === true;
        });
        // 只有arr所有的数组都包含这个值才存进defaultArr里
        status && !defaultArr.includes(i) && defaultArr.push(i);
    });
    return defaultArr
}

例子(调用上面函数)

let arr = [
  [1,2,3,4],[3,4,6],[4,5]
]
qjj(arr)  //[4]
方法二
let arr2 = [
    [1, 2, 3, 4],
    [3, 4, 6],
    [4, 5],
    [4, 5, 8, 9],
    [4, 5, 2, 7],
    [4, 5, 3],
    [4, 5, 0],
  ];

arr.reduce((a, b) => a.filter(c => b.includes(c))) // [4] 
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值