[英]Grouping by multiple fields in Nodejs using Lodash
我目前正在按帳戶對數據進行分組,但也需要按銷售人員進行分組。 但是,我無法弄清楚如何成功實現該功能,以便同時按多個字段對它進行分組。 有人可以提供一些有關我該如何做的指導嗎?
這是我現在對數據進行分組的功能:
filteredData[rep.id] = _.chain(filteredData[rep.id]).groupBy('account').map(function(v, i) {
return {
customer: i,
salesperson: _.reduce(v, function(res, val) {
return val['salesperson'];
},0),
sales_ytd: _.reduce(v, function(res, val) {
return res + Number(val['sales - ytd']);
},0),
mgn$_ytd: _.reduce(v, function(res, val) {
return res + Number(val['margin - ytd']);
},0),
sales_last: _.reduce(v, function(res, val) {
return res + Number(val['sales - pytd']);
},0),
mgn$_last: _.reduce(v, function(res, val) {
return res + Number(val['margin - pytd']);
},0)
}
}).value();
需要按多個字段分組時,需要合並字段值。
示例(未經測試):
filteredData[rep.id] = _(filteredData[rep.id])
.groupBy(function(o) {
return o.account + '-' + o.salesperson;
})
.map(function(v, i) {
var customer = _.head(_.words(i));
return {
customer: customer,
salesperson: _.reduce(v, function(res, val) {
return val['salesperson'];
},0),
sales_ytd: _.reduce(v, function(res, val) {
return res + Number(val['sales - ytd']);
},0),
mgn$_ytd: _.reduce(v, function(res, val) {
return res + Number(val['margin - ytd']);
},0),
sales_last: _.reduce(v, function(res, val) {
return res + Number(val['sales - pytd']);
},0),
mgn$_last: _.reduce(v, function(res, val) {
return res + Number(val['margin - pytd']);
},0)
};
})。值();
在沒有輸入數據和預期結果的情況下理解代碼是有點不清楚的,但是,我相信您正在對數據進行分組並一次格式化結果。 也許您可以考慮分離函數編寫的關注點:
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,我無法測試代碼,希望它對您有所幫助
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.