vue3.0 实现条件查询 and or

用and或者or连接起来的条件查询。
比如,国别:中国 and 使用频段:255 点击查询
或者 国别:中国 or 使用频段:255 点击查询

类似于这种查询,首先在这我实现的是精准查询。利用的是set集合,思想是第一个条件先把数组转换成set集合,然后通过filter过滤,然后判断每次的连接词 是 and还是or,如果是or直接过滤 然后转换成set集合的数据,并且和之前的set集合进行合并。因为我们都知道set的特性,可以保证里面数据的唯一性,所以我们可以利用集合的交和并来实现and 和 or的查询。
同理,如果是and,那我们将数组过滤进行转换成set,并且与之前的set进行交操作。

这是我需要输入的查询条件样式图,然后我们跟保存的数据进行比较和过滤,最后更新需要展示的数据。

 dataProcess(data,condition,content){
      if(condition === "国别"){
        return data.filter((item) => {
          return item.satNation.trim() === content.trim();
        })
      }else if(condition === "使用频段"){
        return data.filter((item) => {
          return item.satBand.trim() === content.trim();
        })
      }else if(condition === "发射时间"){
        return data.filter((item) => {
          // console.log(item.date +"?????"+content )
          // console.log(item.date.trim() === content.trim())
          return item.launchDate.trim() === content.trim();
        })
      }else{
        return data.filter((item) => {
          return item.constellation === content;
        })
      }
    },
    dataFilter(conditionData){
      console.log("@@@@")
      console.log(conditionData);
      var dataCopy = new Set(this.dataProcess(this.tableData,conditionData[0].condition,conditionData[0].data));
      console.log(dataCopy);
      for(let i=1;i<conditionData.length;i++){
        if(conditionData[i].select === "Or"){
          let arrayCopy = new Set(this.dataProcess(this.tableData,conditionData[i].condition,conditionData[i].data));
          dataCopy = new Set([...dataCopy,...arrayCopy]);
          // console.log(dataCopy);
        }else{
          let arrayCopy1 = new Set(this.dataProcess(this.tableData,conditionData[i].condition,conditionData[i].data));
          console.log(arrayCopy1);
          dataCopy = new Set([...dataCopy].filter(x => arrayCopy1.has(x)));
          console.log(dataCopy);
        }
      }
      this.tableData = [...dataCopy];
      console.log(this.tableData);
    }
  },
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值