如何使用 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 的值是一个发票对象数组,其中每个对象都包含属性invoiceToFullNamepriceGross (您突出显示了priceNett,但指定了priceGross),并且您想将其转变成一个包含名称和价格总和的对象? "Khalem Williams":2400, ... 输出会更好,让Object合并唯一的 【参考方案1】:

我真诚地建议将您的数据转换为以名称为键(唯一)和总总价格为值的对象:


  "Khalem Williams": 2400,
  "John Doe": 2100

但是,我在下面的 sn-p 示例代码中包含了如何将数据转换为对象数组的示例代码。我使用了Object.keysArray#reduceArray#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 中使用它

SQL 如何获取 XML 数据列的值并在 where 子句中使用它

如何更新json文件中的值并通过node.js保存

Azure 数据资源管理器获取不同的值并按顺序排列

合并数组的值并对重复值求和