如何使用 JS 获取不同的值并在 JSON 上求和
Posted
技术标签:
【中文标题】如何使用 JS 获取不同的值并在 JSON 上求和【英文标题】:How to get distinct values and sum the total on JSON using JS 【发布时间】:2017-07-24 06:20:33 【问题描述】:如何从不同的值中获取数据,同时对同一唯一行的总值进行求和
这是 JSON 数据结果
如您所见,它们具有相同的全名。合计priceGross
时如何获得不同的值。
结果应该是返回
例如。 "Khalem Williams"
加总 priceGross
" 1200 + 1200 " = 2400
结果返回
FullName : "Khalem Williams"
TotalPriceGross: "2400"
我通过下面的代码获得了不同的值,但我想知道如何在获得不同值的同时对总 priceGross 求和。
var countTotal = [];
$.each(data.aaData.data,function(index, value)
if ($.inArray(value.invoiceToFullName, countTotal)==-1)
countTotal.push(value.invoiceToFullName);
);
【问题讨论】:
您能否确认这是您要问的问题:data.aaData.data
的值是一个发票对象数组,其中每个对象都包含属性invoiceToFullName
和priceGross
(您突出显示了priceNett
,但指定了priceGross
),并且您想将其转变成一个包含名称和价格总和的对象?
"Khalem Williams":2400, ...
输出会更好,让Object合并唯一的
【参考方案1】:
我真诚地建议将您的数据转换为以名称为键(唯一)和总总价格为值的对象:
"Khalem Williams": 2400,
"John Doe": 2100
但是,我在下面的 sn-p 示例代码中包含了如何将数据转换为对象数组的示例代码。我使用了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)
【讨论】:
这很有帮助。我不知道 javascript 中预定义的“减少”功能。谢谢!【参考方案2】:刚刚创建了我自己的类似于你的虚拟数据,希望你明白,如果没有,你可以粘贴你的 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
);
希望对您有所帮助,祝您编码愉快
【讨论】:
以上是关于如何使用 JS 获取不同的值并在 JSON 上求和的主要内容,如果未能解决你的问题,请参考以下文章
如何获取用户选择的按钮值并在 laravel 5.4 的控制器上使用它
如何使用 Bootstrap Multiselect 获取所有选定的值并在 AJAX 中使用它