簡體   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