交集-并集-差集

来源【原创】 / 1624人浏览
时间:2021-04-13 10:44:13
0

最近在小程序项目开发中,需要用到交集-并集-差集的数据环节,经过查阅网上资料,再结合自己的使用需求整理了一下。

网上较多的是对1维数组的多种集合处理 ,我这边需要用到二维数组的处理,使用ES6的一些filter,some等

 temp(){
    // 可以基于filter方法,结合组合方法实现,其中部分代码借鉴网上资料
    const arr1 = [1,2,3,4,5,6,7,8,9],
          arr2 = [5,6,7,8,9];
      // 交集      
      let intersection = arr1.filter(function (val) { return arr2.indexOf(val> -1 })   //写法1:indexOf
      let intersection = arr1.filter(item => arr2.some(ele => ele === item))   //写法2:some

      // 并集
      let union = arr1.concat(arr2.filter(function (val) { return !(arr1.indexOf(val> -1}))
      // 补集 两个数组各自没有的集合
      let complement = arr1.filter(function (val) { return !(arr2.indexOf(val> -1})
      .concat(arr2.filter(function (val) { return !(arr1.indexOf(val> -1}))
      
      // 差集       
      let diff = arr1.filter(function (val) { return arr2.indexOf(val=== -1 })   //写法1:indexOf
      let diff = arr1.filter(item => !arr2.some(ele => ele === item))    //写法2:some

      console.log('arr1: ', arr1);
      console.log('arr2: ', arr2);
      console.log('交集', intersection);
      console.log('并集', union);
      console.log('补集', complement);
      console.log('差集', diff);
  },

我这里实际业务的一部分代码,实际业务为"吉利汽车商城“里面的多辆汽车参数pk逻辑


  //整合汽车相同参数
  integerPro(){
    const diff = this.data.diff   //差集
    let pkcars = this.data.pkcars //完整数据集
    // 循环组装数据
    pkcars.map((e,index)=>{
      // console.log('integerPro,e',e)
      const ownerpros =  e.propertylist.filter(item => !diff.some(ele => ele.propertyId === item.propertyId))
      const integerPro = [...diff,...ownerpros]
      pkcars[index].propertylist = integerPro.sort(this.compare('propertyId'))
    })
    this.setData({ pkcars })
    // console.log('pkcars',pkcars)
  },
打赏