Немного неясно понять ваш код без входных данных и ожидаемого результата, но я полагаю, что вы группируете данные и форматируете результат за один раз.может быть, вы могли бы рассмотреть разделение задач написания функции:
const formatData = (object, index) => {
return = {
customer: index,
salesperson: _.reduce(object, function(res, val) {
return val['salesperson'];
},0),
sales_ytd: _.reduce(object, function(res, val) {
return res + Number(val['sales - ytd']);
},0),
mgn$_ytd: _.reduce(object, function(res, val) {
return res + Number(val['margin - ytd']);
},0),
sales_last: _.reduce(object, function(res, val) {
return res + Number(val['sales - pytd']);
},0),
mgn$_last: _.reduce(object, function(res, val) {
return res + Number(val['margin - pytd']);
},0)
}
}
Затем вы можете перебрать список предложений группировки и вернуть объект, содержащий несколько групп:
const groupFormatedDataBy = ( ...groupingClasses ) => {
let output = {}
grupingClasses.forEach(groupingClass => {
output[groupingClass] = _.chain(filteredData[rep.id])
.groupBy(groupingClass)
.map( formatData )
.value();
})
return output
}
PS:Я не смог протестировать код без примера данных jejeje, надеюсь, он вам поможет