繁体   English   中英

Angular JS +使用$ filter从对象列表中获取属性到Array中

[英]Angular JS + get an attribute from a list of objects into Array using $filter

我需要从对象数组中的项目中获取特定属性。

var arrayOfObjects = [
  {"name":"as","code":"9874"},
  {"name":"sd","code":"9541"},
  {"name":"df","code":"1574"},
  {"name":"fg","code":"5874"},
  {"name":"gh","code":"3652"},
  {"name":"hj","code":"1452"}
]

结果

var newArrayOfObjectsFiltered = [
  {"code":"9874"},
  {"code":"9541"},
  {"code":"1574"},
  {"code":"5874"},
  {"code":"3652"},
  {"code":"1452"}
]

如您所见,我想要列表中每个对象的code属性。

我已经尝试了以下方法,但是不起作用:

var filteredArray = filterFilter(arrayOfObjects, 'code');

您需要这样的自定义过滤器

app.filter('myFilter, 'function(){
  return function(array){
    if(!arrayOfObjects) return [];
    return arrayOfObjects.map(function(obj){
      return { "code": obj.code }
    })
  }
})

除非您在一个模板中需要它,否则我什至不会使用过滤器。 如果只过滤控制器或服务中的内容,则可以简单地使用Array.prototype.map()并提醒您一种更实用的方法。 lodash类的实用程序库结合使用,您可以执行以下操作:

arrayOfObjects.map(function(item) {
    return _.pick(item, 'code');
});

选择仅采用指定的属性。

_.pick(object,[predicate],[thisArg])

创建一个由拾取的对象属性组成的对象。 属性名称可以指定为单个参数或属性名称数组。 如果提供了谓词,则为对象的每个属性调用该谓词,选择该谓词将返回真值。 谓词绑定到thisArg,并使用三个参数调用:(值,键,对象)。

更新1

如果您需要在模板中使用它,例如,过滤传递给ng-repeat的集合,则只需将代码段插入自定义过滤器中即可,如下所示:

angular.module('app', []).filter('myCustomFilter', function() {
    return function(input, properties) {
        return input.map(function(item) {
            return _.pick(item, properties);
        });
    };
});

然后可以像这样使用它:

<li ng-repeat="item in arrayOfObjects | myCustomFilter:['code']"></li>

结果将是每个项目仅具有指定的属性。

暂无
暂无

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

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