![](/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.