我正在尝试使用多个过滤器过滤数组。但到目前为止,我还没有成功地得到我期待的东西。
这是我的组件Angular
list = [ {type: type1, code: code1}, {type: type2, code: code2}]
searchElement(code?: string, type?: string){
var myVar = this.list
if(type)
myVar = myVar.filter(elt => elt.type.indexOf(type) > -1);
if(code)
myVar = myVar.filter(elt => elt.type.indexOf(code) > -1);
//call another function myFunction() with the filtered array myVar
}
由于在过滤myVar之前调用了异步行为myFunction()
。如何在调用myFunction()
之前确保过滤myVar?
答案 0 :(得分:1)
您需要在一个 filter
回调中使用这两个过滤器值,而不是使用多个filter
来电:
list = [ {type: type1, code: code1}, {type: type2, code: code2}];
searchElement(code?: string, type?: string){
var myVar = this.list;
if (type || code) {
myVar = myVar.filter(elt => (!type || elt.type.indexOf(type) > -1) && (!code || elt.code.indexOf(code) > -1));
}
// ...
}
注意每个条件如何采用!filterValue || useTheFilterValue
形式,这样如果没有过滤器值,则满足该条件,如果有,则仅在过滤器匹配时才满足。
我已经假设"和"匹配是必需的,这就是我加入&&
的两个过滤检查的原因。例如,如果同时提供type
和code
,我认为两者必须匹配才能在数组中保留一个元素。
(另外,您正在code
对elt.type
而不是elt.code
进行检查。)