如何使用JS获取不同的值并使用JSON总计JSON

时间:2017-03-04 00:47:34

标签: javascript jquery arrays json arraylist

如何从不同的值中获取数据,还可以对来自同一唯一行的总值进行求和

这是JSON数据结果

enter image description here

如您所见,它们具有相同的全名。如何在总计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);
          }
});

2 个答案:

答案 0 :(得分:2)

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

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

但是,我已经在下面的代码片段中包含了如何将数据转换为对象数组的示例代码。我使用了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)

答案 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}
});

希望它有所帮助,快乐编码