具有另一个数组的筛选器的JavaScript筛选器数组
我目前正试图通过存储在另一个数组中的多个筛选器筛选一个数组。 筛选器对象包含要筛选的属性的名称、运算符和条件。 所以它可能看起来像这样:具有另一个数组的筛选器的JavaScript筛选器数组,javascript,arrays,filter,Javascript,Arrays,Filter,我目前正试图通过存储在另一个数组中的多个筛选器筛选一个数组。 筛选器对象包含要筛选的属性的名称、运算符和条件。 所以它可能看起来像这样: let过滤器=[{ 属性:“id”, 接线员:'{ filters.forEach((filter)=>{ 开关(过滤器操作员){ 案例“=”: 如果(!(项[filter.attribute]>=filter.condition))返回false 打破 大小写“*通配符*”: 如果(!项[filter.attribute]。包括(filter.conditi
let过滤器=[{
属性:“id”,
接线员:'{
filters.forEach((filter)=>{
开关(过滤器操作员){
案例“=”:
如果(!(项[filter.attribute]>=filter.condition))返回false
打破
大小写“*通配符*”:
如果(!项[filter.attribute]。包括(filter.condition))
返回错误
打破
}
})
返回真值
})
提前感谢!:)您需要根据过滤器从过滤器回调返回布尔值。现在,您总是从传递给过滤器的回调函数返回
true
试着这样做:
constdoesitempassfilter=item=>filter=>{
//你的过滤逻辑
}
items.filter(item=>filters.every(doesItemPassFilter(item));
我的概念是,你的过滤器是“和”-这意味着一个项目必须匹配所有的过滤器。如果你的过滤器是“或”'s-意味着一个项必须至少匹配一个筛选器-然后只需将
every
更改为some
,您需要从基于筛选器的筛选器回调返回布尔值。现在,您总是从传递给筛选器的回调函数返回true
试着这样做:
constdoesitempassfilter=item=>filter=>{
//你的过滤逻辑
}
items.filter(item=>filters.every(doesItemPassFilter(item));
我的概念是,你的过滤器是“和”,这意味着一个项目必须匹配所有过滤器。如果你的过滤器是“或”,这意味着一个项目必须至少匹配一个过滤器,那么只需将
every
更改为some
你的主要问题是没有使用forEach
回调函数返回值
听起来您想要的是在过滤器上为项目中的每个项目使用数组
const filters=[{“attribute”:“id”,“operator”:“您的主要问题是没有使用forEach
回调函数返回值
听起来您想要的是在过滤器上为项目中的每个项目使用数组
const过滤器=[{“属性”:“id”,“运算符”:OP对每个否定条件的返回false
检查表明他们确实需要和评估OP对每个否定条件的返回false
检查表明他们确实需要和评估非常感谢:)像一个charme!非常感谢:)像一个charme!
items.filter((item) => {
filters.forEach((filter) => {
switch (filter.operator) {
case '<':
if (!(item[filter.attribute] < filter.condition)) return false
break
case '<=':
if (!(item[filter.attribute] <= filter.condition)) return false
break
case '=':
if (!(item[filter.attribute] === filter.condition)) return false
break
case '>':
if (!(item[filter.attribute] > filter.condition)) return false
break
case '>=':
if (!(item[filter.attribute] >= filter.condition)) return false
break
case '*wildcard*':
if (!item[filter.attribute].includes(filter.condition))
return false
break
}
})
return true
})