[英]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.