Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用javascript进行日常过滤?_Javascript_Algorithm - Fatal编程技术网

如何使用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。一些
具有我们在本例中寻找的短路行为。