重新编译JSON数据以减少行数

时间:2016-04-26 11:08:23

标签: javascript jquery json chart.js

如果我的JSON结果有很多行,有时最多100行

标签:第1部分价值:1000 标签:Part2价值:700 标签:Part3价值:600 标签:Part4价值:500

......等等

我想更改数据,以便正常列出前5个结果,但不是列出其余数据,而是将值相加并将标签更改为“其他人”。

实施例

标签:第1部分价值:1000 标签:Part2价值:700 标签:Part3价值:600 标签:Part4价值:500 标签:Part5价值:500 标签:其他价值:25650

在我传递给chart.js派之前,这可以用javascript做吗?或者有更好的方法来实现这一目标吗?

派对的当前代码

function chart1(branch, apitime){           
            $.ajax({
           url: jsonpath' + apitime + branch,
           dataType: 'jsonp',
           success: function (response) {
                console.log (response);
                var datachart = response;
                var ctx2 = document.getElementById("chart-area2").getContext("2d");
                var myChart = new Chart(ctx2).Pie(datachart);
           }
        });
    }

数据已排序,我可以更改服务器上的SQL来执行此操作,我只是不知道正确的方法是什么。

JSON示例http://pastebin.com/p3Y9mSX3

1 个答案:

答案 0 :(得分:3)

您可以在创建图表之前修改数据。

var top6 = datachart.slice(0,5)
top6[5] = {
    label: 'other',
    value: datachart.slice(5).reduce(function(sum, data) {
      return sum + data.value
    }, 0)
}
var ctx2 = document.getElementById("chart-area2").getContext("2d");
var myChart = new Chart(ctx2).Pie(top6);

这可以更加通用以获得前N个条目

var getTopN = function(dataArray, n)
  var tops = dataArray.slice(0, n)
  tops[n] = {
    label: 'other',
    value: dataArray.slice(n).reduce(function(sum, data) {
      return sum + data.value
    }, 0)
  }
  return tops
}  

var top5 = getTopN(datachart, 5) 
var top10 = getTopN(datachart, 10)