Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/422.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_Angular - Fatal编程技术网

Javascript 角度-动态操纵过滤条件

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

我有3个数组

    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]];
}
}
}
} 
此函数在同时指定
严重过滤器
规则过滤器
的情况下工作

如何检查以下情况下的过滤:

  • 规则筛选器可能为空
  • 严重筛选器可能为空
  • 定义了一个或多个SeverityFilter,但不存在规则筛选器,反之亦然

  • 在不编写冗长的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
    因为某种奇怪的原因