簡體   English   中英

如何用lodash對對象數組中的屬性進行分組?

[英]How to groupby property in array of objects with lodash?

我正在使用IE 11

我有一個對象數組,我想通過一個存儲在稱為“程序”的數組中的稱為“程序”的屬性對對象數組進行分組。 我能夠使用lodash,但我認為我用錯了,因為結果未按分組顯示。

這是我的代碼:

var programs = ['ATR','QTR','STR'];


       axios.get("https://my-json-server.typicode.com/isogunro/jsondb/Programs").then(function(response) {
         groupProgram(response.data);
      })
      .catch(function (error) {
        console.log(error+"log");
      });


      function groupProgram(data){
        var newProgram = [];
        _.groupBy(data, function(item){
           for (var i=0; i<programs.length; i++){
             if (programs[i] == item.program){
               newProgram.push(item);
             }
           }
        });
        return newProgram;
      }

我最終將使用結果在Vuejs中生成一個表。 這是

任何幫助將非常感激。

謝謝!

您可以使用Array.reduce (不帶lodash):

 axios.get("https://my-json-server.typicode.com/isogunro/jsondb/Programs").then(function(response) { const groupped = groupProgram(response.data); console.log(groupped); }) .catch(function(error) { console.log(error + "log"); }); function groupProgram(data) { const result = data.reduce((acc, curr) => { acc[curr.program].push(curr); return acc; }, { 'ATR': [], 'QTR': [], 'STR': [], }); return result; } 
 <script src="https://cdnjs.cloudflare.com/ajax/libs/axios/0.19.0/axios.min.js"></script> 

編寫代碼的方式是,將groupBy函數用作forEach函數並自己操作數據(如果使用forEach,則可以)。 要使用groupBy功能,您需要更多類似的東西:

var programs = ['ATR','QTR','STR'];


axios.get("https://my-json-server.typicode.com/isogunro/jsondb/Programs").then(function(response) {
     var groupedData = groupProgram(response.data);
    console.log(groupedData);
})
.catch(function (error) {
    console.log(error+" log");
});


function groupProgram(data){
    return _.groupBy(data, 'program');
}

當然,要對其執行操作,通常會將其與其他功能鏈接在一起。 您可能會發現,根據要對數據進行的處理,使用reduce,map和類似的函數可以更輕松地過渡到更“現代”的ngRx方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM