![](/img/trans.png)
[英]How to filter an array of objects based of attribute from another object in Angular?
[英]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.