angularjs中的数组过滤器

时间:2016-03-30 20:46:29

标签: angularjs angular-filters

我需要创建一个搜索以下对象数组的过滤器,并过滤掉ID值等于数组中任何对象的Message值的对象。此外,过滤器应仅返回level等于1的对象。我已经设法过滤了level属性,但我似乎无法弄清楚如何做其余的事情。

我们考虑一个示例:ID: 001包含在Message 006中,因此我想过滤掉ID006的所有对象。< / p>

$scope.myData = [
{
   "ID" : "001",
   "Message" : "006",
   "level":"1"
},
{
   "ID" : "002",
   "Message" : "test test test test1",
   "level":"1"

},
{
   "ID" : "003",
   "Message" : "test test test test",
   "level":"1"

},
{
   "ID" : "004",
   "Message" : "test test test test",
   "level":"1"
},
{
   "ID" : "005",
   "Message" : " My Test",
   "level":"1"

},
{
   "ID" : "006",
   "Message" : "",
   "level":"1"

},
{
   "ID" : "007",
   "Message" : "next level",
   "level":"2"

}

];
})

并过滤:

app.filter('filterData3', function () {
return function (data) {
    var dataToBePushed = [];
    data.forEach(function (resultData) {
        if (resultData.level == 1)
            dataToBePushed.push(resultData);
    });
    return dataToBePushed;
}
});

1 个答案:

答案 0 :(得分:0)

假设您想要的是 NOT 在过滤后的数组中包含ID包含在另一个元素的Message中的元素,您可以编写如下过滤器:

.filter('filterData3', function () {
return function (data) {
    var dataToBePushed = [];
    var messages =[];
    data.forEach(function (resultData) {
        if (resultData.level == 1 && (messages.indexOf(resultData.ID) == -1)) {
            messages.push(resultData.Message);
            dataToBePushed.push(resultData);
        }   
    });
    return dataToBePushed;
}})

希望这适合你