You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将返回的JSON数据转换为Highcharts所需的series格式?

嘿,这个需求很常见,就是把扁平的数组按名称分组,转换成Highcharts需要的series结构对吧?我给你用原生JavaScript和jQuery分别写个实现,逻辑都很清晰,你一看就懂~

首先注意下你提供的原始JSON里有个多余的逗号(, , {),这会导致语法错误,我已经在示例里修正了,实际使用时要确保接口返回合法的JSON哦。

原生JavaScript实现

这是最轻量化的方案,不需要依赖任何库:

// 修正后的原始接口数据
const rawData = [{"id":1,"name":"AAA","value":5}, {"id":1,"name":"BBB","value":8}, {"id":1,"name":"CCC","value":9}, {"id":1,"name":"AAA","value":15}, {"id":1,"name":"BBB","value":3}, {"id":1,"name":"CCC","value":5}, {"id":1,"name":"AAA","value":3}, {"id":1,"name":"BBB","value":10}, {"id":1,"name":"CCC","value":11}];

// 用一个临时对象做分组映射,键是name,值是对应的series项
const groupMap = {};

// 遍历原始数据
rawData.forEach(item => {
  // 跳过无效条目(比如空对象、缺少name/value的情况)
  if (!item || !item.name || typeof item.value === 'undefined') return;
  
  // 如果当前name还没在映射里,就初始化一个series项
  if (!groupMap[item.name]) {
    groupMap[item.name] = {
      name: item.name,
      data: []
    };
  }
  
  // 把当前值推入对应分组的data数组
  groupMap[item.name].data.push(item.value);
});

// 把映射对象的values提取出来,就是Highcharts需要的series数组
const series = Object.values(groupMap);

console.log(series);
// 输出结果:[{ name: 'AAA', data: [5, 15, 3] }, { name: 'BBB', data: [8, 3, 10] }, { name: 'CCC', data: [9, 5, 11] }]

jQuery实现

如果你的项目已经引入了jQuery,也可以用$.each来遍历,逻辑和原生完全一致:

// 修正后的原始接口数据
const rawData = [{"id":1,"name":"AAA","value":5}, {"id":1,"name":"BBB","value":8}, {"id":1,"name":"CCC","value":9}, {"id":1,"name":"AAA","value":15}, {"id":1,"name":"BBB","value":3}, {"id":1,"name":"CCC","value":5}, {"id":1,"name":"AAA","value":3}, {"id":1,"name":"BBB","value":10}, {"id":1,"name":"CCC","value":11}];

const groupMap = {};

// 使用jQuery的each方法遍历数组
$.each(rawData, function(index, item) {
  // 同样跳过无效条目
  if (!item || !item.name || typeof item.value === 'undefined') return;
  
  if (!groupMap[item.name]) {
    groupMap[item.name] = {
      name: item.name,
      data: []
    };
  }
  
  groupMap[item.name].data.push(item.value);
});

const series = Object.values(groupMap);

核心思路就是用对象做中间分组容器,利用对象键的唯一性来聚合相同名称的数据,最后把对象的值转换成数组就是Highcharts需要的格式啦~

内容的提问来源于stack exchange,提问作者hnacer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:28:32