//olist 待筛选的表格列表数据,query 筛选条件map
filterQuery(olist,query){
let list=this.deepClone(olist);//深度复制数据,隔离原数据
let returnList=[];
if(list){
//获取所有的查询条件
let filter=this.deepClone(query);
//获取所有的查询条件的key的list
const fkeys=Object.keys(filter);
//去除查询条件前后的空格
fkeys.forEach(item=>{filter[item]=filter[item].trim()});
//获取所有符合查询条件的列表集合
returnList=list.filter(item=>fkeys.every(key=>item[key].includes(filter[key])));
}else{
console.log('无数据');
}
return returnList;
}
举例:
olist=
[{id:01,name:'张三',age:'30'},
{id:02,name:'李四',age:'20'},
{id:03,name:'王五',age:'10'},]
query={
id:0,
name:'张',
age:'0'
}
筛选结果:
returnList=
[{id:01,name:'张三',age:'30'},
简单解释:
fkeys获取的是查询条件的所有的key的list集合 [‘id’,‘name’,‘age’]
list.filter即过滤,条件是
fkeys.every list中每条数据 都要进行fkeys所有的key的数据判断是否符合,符合的添加到 returnList中
includes 判断 当前字符串,是否包含查询条件的字符串
fkeys.every(key=>item[key].includes(filter[key]))
这条翻译一下等价于
item.id.includes(filter.id)&&item.name.includes(filter.name)&&item.age.includes(filter.age)
因为感觉这个写法可以通用,与具体的数据和查询条件无关,所以记录一下