如何使用javascript进行日常过滤?
我想构建一个过滤器,根据有多少规则,它会根据这些规则过滤大量对象 我有这样一个对象数组:如何使用javascript进行日常过滤?,javascript,algorithm,Javascript,Algorithm,我想构建一个过滤器,根据有多少规则,它会根据这些规则过滤大量对象 我有这样一个对象数组: const myList = [ {name: 'Joe', sex: 'male', isStared: false, }, {name: 'Ann', sex: 'female', isStared: true, }, {name: 'Gil', sex: 'female', isStared: true, }, ] 我还有一个对象,其中包含用户指定的要填充的规则,例如: const-r
const myList = [
{name: 'Joe',
sex: 'male',
isStared: false,
},
{name: 'Ann',
sex: 'female',
isStared: true,
},
{name: 'Gil',
sex: 'female',
isStared: true,
},
]
我还有一个对象,其中包含用户指定的要填充的规则,例如:
const-rules={sex:'male',istared:'false'}
我不想硬编码,这样它就可以专门检查sex==='male'
或isStared===true
但我想,如果有更多的是更少的规则,它会检查这些规则,并只返回那些例如是男性和被盯着的规则
我现在使用的是硬编码过滤,但如果规则发生变化,它将被破坏:
myList.filter(friend=>friend.sex==action.filterQuery.sex&&friend.sex.isStared==action.filterQuery.sex)
你知道如何做到这一点吗
谢谢。您可以使用
过滤器
,对象。条目
,以及每个
-
const myList=[
{姓名:'乔',
性别:'男',
伊斯塔德:错,
},
{名称:'Ann',
性别:'女性',
伊斯塔德:没错,
},
{名称:'Gil',
性别:'女性',
伊斯塔德:没错,
},
]
const rules={sex:'male',isStared:false}/!
常数结果=
myList.filter(项=>
Object.entries(rules).every([k,v])=>
项目[k]==v
)
)
console.log(结果)
// [
// {
//“姓名”:“乔”,
//“性别”:“男性”,
//“isStared”:错误
// }
//]
您可以使用过滤器
,对象。条目
,以及每个
-
const myList=[
{姓名:'乔',
性别:'男',
伊斯塔德:错,
},
{名称:'Ann',
性别:'女性',
伊斯塔德:没错,
},
{名称:'Gil',
性别:'女性',
伊斯塔德:没错,
},
]
const rules={sex:'male',isStared:false}/!
常数结果=
myList.filter(项=>
Object.entries(rules).every([k,v])=>
项目[k]==v
)
)
console.log(结果)
// [
// {
//“姓名”:“乔”,
//“性别”:“男性”,
//“isStared”:错误
// }
//]
const filter\u with\u ruleset=ruleset=>input\u arr=>input\u arr.filter(
item=>Object.entries(规则集)
.reduce((累计,当前)=>累计和项目[当前[0]]==当前[1],真)
);
//用法
const规则集_1={性别:'male',isStared:true};
常量过滤器带星号的男性=过滤器带有规则集(规则集1);
console.log(filter_started_males(myList));
但这只按相等进行过滤,而不是按名称进行过滤。以“或其他东西开头
还要注意的是,您的原始数据有一个拼写错误,看起来isStared
应该是isStarred
,但只要您保持一致,就可以了。const filter\u with\u ruleset=ruleset=>input\u arr=>input\u arr.filter(
item=>Object.entries(规则集)
.reduce((累计,当前)=>累计和项目[当前[0]]==当前[1],真)
);
//用法
const规则集_1={性别:'male',isStared:true};
常量过滤器带星号的男性=过滤器带有规则集(规则集1);
console.log(filter_started_males(myList));
但这只按相等进行过滤,而不是按名称进行过滤。以“或其他东西开头
还要注意的是,您的原始数据有一个拼写错误,看起来
isStared
应该是isStarred
,但只要您保持一致,您就可以了。这是否回答了您的问题?这回答了你的问题吗<代码>对象。条目(someObj)给出了一个[键,值]
对数组。例如Object.entries({a:1,b:2})
给出[[a',1],[b',2]]
对象。entries(someObj)
给出了[key,value]
对的数组。例如Object.entries({a:1,b:2})
给出[[a',1],'b',2]
使用reduce
意味着即使在发现false
结果后,您仍将继续迭代规则集
条目。也就是说,无需accum&&&&&&&&&&&
,在accum
仅变为false
一次后,结果将始终为false
Array.prototype。每个
和Array.prototype。有些
具有我们在本例中寻找的短路行为。使用reduce
意味着您将继续迭代规则集
条目,即使在发现false
结果之后。也就是说,无需accum&&&&&&&&&&&
,在accum
仅变为false
一次后,结果将始终为false
Array.prototype。每个
和Array.prototype。一些
具有我们在本例中寻找的短路行为。