reduce的用法,如:多个数组求交集

1.多个数组求交集

//多个数组取交集,array是一个二维数组。[[1,2,3],[3,4,5]],keys就是条件
  function getIntersection(array, keys) {
    //2个数组的交集
    function intersection(getar1, geta2, key) {
      let arr = getar1.map(item => item[key])
      let newArr3 = geta2.filter(info => {
        return new Set(arr).has(info[key])
      })
      return newArr3
    }

    let res = array.reduce((a, b) => {
      return intersection(a, b, keys)
    })
    return res;
  }
 //例如:
 let list = [
      { itemNo: "1", psItemSups: [{ supplierNo: "A", isShortList: true }, { supplierNo: "B", isShortList: false }, { supplierNo: "Z", isShortList: true }] },
      { itemNo: "2", psItemSups: [{ supplierNo: "A", isShortList: true }, { supplierNo: "C", isShortList: true }] },
      { itemNo: "3", psItemSups: [{ supplierNo: "A", isShortList: true }, { supplierNo: "C", isShortList: true }] },
  	  { itemNo: "4", psItemSups: [{ supplierNo: "A", isShortList: true },{ supplierNo: "C", isShortList: true }]},
    ]
    let allArray = [];
    list.forEach(item => {
      //其他物料的供应商短名单
      let otherShortSup = item.psItemSups.filter(item => { return item.isShortList });
      allArray.push(otherShortSup);
    })
console.log(getIntersection(allArray,"supplierNo"));
//Array [Object { supplierNo: "A", isShortList: true }]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值