在AngularJS中按数组长度或嵌套对象属性进行过滤

时间:2014-12-02 18:51:59

标签: javascript arrays angularjs

我有一个包含这样的对象的数组:

record in recordlist {
    date : "02/12/2014"
    time : "00.02.01"
    car : "369"
    pax: [
        {
        name : "Ben"
        chosen : true
        },
        {
        name : "Eric"
        chosen : true
        }
    ]
}

到目前为止,当我使用ng-repeat列出时,我能够按对象(记录)属性进行过滤。

过滤

<input class="form-control" placeholder="Time" ng-model="search.time">

NG-重复:

<div ng-repeat="record in filteredRecords = (recordlist | filter: search)">

当我想过滤嵌套数组( pax )时会出现问题。我试过这个,但到目前为止还没有运气:

<input ng-model="search.pax.name"> // filter by name property

<input ng-model="search.pax.length"> // filter by array length

任何提示?

1 个答案:

答案 0 :(得分:1)

您可能需要使用自定义过滤器:

这样的事情应该这样做:

<input ng-model="searchName">

<div ng-repeat="record in recordlist | filter: filterByNested">

在你的控制器中:

$scope.filterByNested = function (record) {
    return record.pax.reduce(function (prev, curr, idx, array) {
        return prev || curr.name == $scope.searchName;
    }, false);
};

基本上,您定义了一个自定义过滤器,如果您要搜索的元素位于嵌套数组中,则返回true。

根据长度改变过滤器功能也是微不足道的。