用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);
}
},