使用typeScript

时间:2017-06-20 12:03:45

标签: javascript angular typescript

我正在尝试使用多个过滤器过滤数组。但到目前为止,我还没有成功地得到我期待的东西。

这是我的组件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?

1 个答案:

答案 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形式,这样如果没有过滤器值,则满足该条件,如果有,则仅在过滤器匹配时才满足。

我已经假设"和"匹配是必需的,这就是我加入&&的两个过滤检查的原因。例如,如果同时提供typecode,我认为两者必须匹配才能在数组中保留一个元素。

(另外,您正在codeelt.type而不是elt.code进行检查。)