Javascript 角度-动态操纵过滤条件
我有3个数组Javascript 角度-动态操纵过滤条件,javascript,angular,Javascript,Angular,我有3个数组 var severityFilters = ["High", "Medium", "Low"] var ruleFilters = ["true", "false"] var allResults = [ { "name": "Test1", "severity": "High", "clean": true }, { "name": "Test2", "severity": "Low", "clean": fal
var severityFilters = ["High", "Medium", "Low"]
var ruleFilters = ["true", "false"]
var allResults = [
{
"name": "Test1",
"severity": "High",
"clean": true
},
{
"name": "Test2",
"severity": "Low",
"clean": false
},
{
"name": "Test3",
"severity": "Medium",
"clean": false
},
{
"name": "Test4",
"severity": "High",
"clean": true
}
]
当用户选中或取消选中某些筛选器复选框时,将动态创建severityFilters
数组和ruleFilters
。因此,如果未选中任何severityFilters
复选框,则该数组将为空。如果只选中了High
,则severityFilters
将包含High
。ruleFilters
复选框也是如此
我想编写一个函数,根据severityFilters
和ruleFilters
中的值返回一些过滤结果。选中每个过滤器复选框后,将调用filterResults
函数
var filteredResults = []
filterResults (severityFilters, ruleFilters, allResults)
{
for (let i = 0; i < allResults.length; i++) {
if (severityFilters.length > 0 && ruleFilters.length > 0)
{
if (ruleFilters.includes(this.allResults[i].clean.toString()) &&
severityFilters.includes(allResults[i].severity)
)
{
this.filteredResults = [...this.filteredResults, ...allResults[i]];
}
}
}
}
var filteredResults=[]
筛选结果(严重筛选、规则筛选、所有结果)
{
for(设i=0;i0&&ruleFilters.length>0)
{
if(ruleFilters.includes(this.allResults[i].clean.toString())&&
severityFilters.includes(所有结果[i]。严重性)
)
{
this.filteredResults=[…this.filteredResults,…allResults[i]];
}
}
}
}
此函数在同时指定严重过滤器
和规则过滤器
的情况下工作
如何检查以下情况下的过滤:
在不编写冗长的if条件的情况下,是否有办法调整函数,以便过滤结果,而不管
severityFilters
和ruleFilters
数组的长度。在检查是否包含属性值之前,可以检查筛选器数组的长度。如果severityFilters
为空,!severityFilters.length
将返回true。因此,它不会检查第二个条件,因为|
。如果severityFilters
确实有一些值,则将检查severityFilters.includes(o.severity)
,并且仅过滤severityFilters
中具有severity
值的对象
const severityFilters=[“高”]
常量规则过滤器=[“真”、“假”]
var allResults=[{name:“Test1”,严重性:“高”,clean:true},{name:“Test2”,严重性:“低”,clean:false},{name:“Test3”,严重性:“中等”,clean:false},{name:“Test4”,严重性:“高”,clean:true}];
const output=allResults.filter(o=>
(!severityFilters.length | | severityFilters.includes(o.severity))&&
(!ruleFilters.length | | ruleFilters.includes(o.clean.toString()))
)
console.log(输出)
hmm。。我不能像你定义的那样修改allResults数组。@Jake我没有修改allResults
这里你有clean:!0
。只能是false
或true
。@Jake噢,对不起。我用缩小器把数组排成一行。它将false转换为!0
因为某种奇怪的原因