繁体   English   中英

在对象angular2的嵌套数组中搜索值

[英]Search a value in a nested array of objects angular2

我最近开始研究angular2,因此想知道用例的正确方法。 我有这样的对象数组:

users : Array<Object> = [{
    id: 1,
    tags: [{
        name: 'foo',
        age: 21
    }, {
        name: 'aaa',
        age: 23
    }]
}, {
    id: 2,
    tags: [{
        name: 'ball',
        age: 53
    }, {
        name: 'ttt',
        age: 43
    }]
}, {
    id: 3,
    tags: [{
        name: 'bar',
        age: 32
    }, {
        name: 'fsf',
        age: 11
    }]
}]

我需要将此数据显示为表格并在其上提供搜索选项。 需要根据用户在搜索字段中输入的文本来过滤数据。 在搜索中输入的数据可以匹配该对象中的任何值。 我正在使用angular2 rc4。

在实施此搜索以及如何进行搜索时,我需要帮助。 我也在用lodash。 有什么办法可以利用它的功能。 (不使用jQuery)

请参阅此处如何将过滤器应用于* ngFor

基本上是实现返回所需内容的管道

在Lodash中,您可以使用_.filter_.some_.includes

 var users = [{"id":1,"tags":[{"name":"foo","age":21},{"name":"aaa","age":23}]},{"id":2,"tags":[{"name":"ball","age":53},{"name":"ttt","age":43}]},{"id":3,"tags":[{"name":"bar","age":32},{"name":"fsf","age":11}]}]; var searchItem = "foo"; var filtered = _.filter(users, user => _.some(user.tags, tag => _.includes(tag, searchItem))); console.log(filtered); 
 <script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.min.js"></script> 

如果还要查找子字符串匹配项,则将字段映射到字符串,然后使用String#indexOf

 var users = [{"id":1,"tags":[{"name":"foo","age":21},{"name":"aaa","age":23}]},{"id":2,"tags":[{"name":"ball","age":53},{"name":"ttt","age":43}]},{"id":3,"tags":[{"name":"bar","age":32},{"name":"fsf","age":11}]}]; var searchItem = "f"; var filtered = _.filter(users, user => _.some(user.tags, tag => _.some(tag, field => _.toString(field).indexOf(searchItem) != -1))); console.log(filtered); 
 <script src="https://cdn.jsdelivr.net/lodash/4.15.0/lodash.min.js"></script> 

这是您在HTML中进行过滤的方式,还是要在控制器中进行过滤?

 <li ng-repeat="user in users | filter: { tags: [{ age: search.age}] }">

我发现其他人正在做类似的事情:

http://jsfiddle.net/suCWn/12/

控制器:

$scope.filteredUsers = $filter('filter')(users, function(value) {

    return angular.forEach(value.tags, function(tag) {

      return tag === $scope.searchTerm;

    });
  });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM