【问题标题】:Filter by array length or nested object property in AngularJS在 AngularJS 中按数组长度或嵌套对象属性过滤
【发布时间】:2014-12-02 18:51:58
【问题描述】:

我有一个对象看起来像这样的数组:

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

有什么建议吗?

【问题讨论】:

    标签: javascript arrays angularjs


    【解决方案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。

    将过滤器功能也更改为基于长度的工作是微不足道的。

    【讨论】:

    • 考虑到我的例子,在你的函数中是 function(record) {return record.pax.reduce... ?
    • 我已经编辑了答案以便更好地理解,希望现在它更有意义。
    • 我稍后试试!谢谢!!
    • 到目前为止不工作,过滤器过滤掉所有结果(没有列出):/
    • 好吧,也许我不清楚这个问题。我需要你的jsfiddle做什么,但反过来! : ) 因此,ng-repeat 显示所有结果,当用户输入名称时,与过滤器输入不匹配的 li 元素消失。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-06-21
    • 2021-09-27
    • 1970-01-01
    • 2023-03-31
    • 2018-01-16
    • 1970-01-01
    • 2013-09-01
    相关资源
    最近更新 更多