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

Re-compile JSON data to make less rows

本文关键字:数据 JSON 新编译 编译      更新时间:2023-09-26

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

标签:第1部分 值:1000标签:第2部分 值:700标签:第3部分 值:600标签:第4部分 值:500

。等等

我想更改数据,使其正常列出前 5 个结果,但不列出其余结果,而是对值求和并将标签更改为"其他"。

标签:第1部分 值:1000标签:第2部分 值:700标签:第3部分 值:600标签:第4部分 值:500标签:第5部分 值:500标签:其他 值:25650

我传递图表之前,这是否可以在 javascript 中完成.js饼?还是有更好的方法来实现这一目标?

饼图的当前代码

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

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

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)