如何从不同的值中获取数据,还可以对来自同一唯一行的总值进行求和
这是JSON数据结果
如您所见,它们具有相同的全名。如何在总计priceGross
总和时获得不同的值。
结果应该是返回
例如。 "Khalem Williams"
并添加总priceGross
" 1200 + 1200 " = 2400
结果返回
FullName : "Khalem Williams"
TotalPriceGross: "2400"
我使用下面的代码获取了不同的值,但我想知道如何总计总价格总和同时获得不同的值。
var countTotal = [];
$.each(data.aaData.data,function(index, value){
if ($.inArray(value.invoiceToFullName, countTotal)==-1) {
countTotal.push(value.invoiceToFullName);
}
});
答案 0 :(得分:2)
我诚实地建议将您的数据转换为名称为键(唯一)和总价格作为值的对象:
{
"Khalem Williams": 2400,
"John Doe": 2100
}
但是,我已经在下面的代码片段中包含了如何将数据转换为对象数组的示例代码。我使用了Object.keys
,Array#reduce
和Array#map
的组合。
var data = {
aaData: {
data: [{
invoiceToFullName: "Khalem Williams",
priceGross: 1200
},
{
invoiceToFullName: "Khalem Williams",
priceGross: 1200
},
{
invoiceToFullName: "John Doe",
priceGross: 500
},
{
invoiceToFullName: "John Doe",
priceGross: 1600
},
]
}
}
var map = data.aaData.data.reduce(function(map, invoice) {
var name = invoice.invoiceToFullName
var price = +invoice.priceGross
map[name] = (map[name] || 0) + price
return map
}, {})
console.log(map)
var array = Object.keys(map).map(function(name) {
return {
fullName: name,
totalPriceGross: map[name]
}
})
console.log(array)
答案 1 :(得分:1)
刚刚创建了我自己的虚拟数据,类似于你的希望你能得到这个想法,如果不是你可以粘贴你的json,我可以调整我的解决方案,只是懒得重新创建你的json。
您的问题似乎是来自sql的典型分组。
示例数据:
var resultsData = [{name: 'sipho', amount: 10}, {name: 'themba', amount: 30}, {name: 'sipho', amount: 60}, {name: 'naidoo', amount: 30}, {name: 'gupta', amount: 70}, {name: 'naidoo', amount: 10}];
获取您要分组的客户(字段)的价值:
var customers = $.unique(resultsData.map(function(value){return value.name}));
浏览每个客户并添加他们的总和:
var desiredSummary = customers.map(function(customer){
var sum =0;
$.each(test,function(index, value){sum+=(value.name==customer?value.amount:0)});
return {customer: customer, sum: sum}
});
希望它有所帮助,快乐编码