繁体   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