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

如何对JavaScript数组去重并合并时间值,适配FusionCharts图表格式?

看起来你已经完成了数据抓取和初步的数组构建,接下来的核心是数据聚合和格式映射,我来帮你一步步实现把原始数组转换成FusionCharts堆叠柱状图需要的格式:

第一步:聚合重复项的耗时

首先我们需要把同一个执行人、服务团队、工作内容的耗时加总起来,用一个对象做映射是最直观的方式:

// 你的原始数据数组
const objectarray = [
  ["1.50", "Ad-hoc queries or calls", "Team 1", "James"],
  ["2.50", "Ad-hoc queries or calls", "Team 1", "James"],
  ["1.00", "Advice", "Team 2", "James"],
  ["3.50", "Meeting (External 3rd Party)", "Team 1", "James"],
  ["1.20", "Administration", "Team 2", "James"],
  ["5.50", "Advice", "Team 1", "John"]
];

// 聚合相同组合的耗时
const aggregatedData = {};
objectarray.forEach(item => {
  const [timeStr, activity, team, person] = item;
  const time = parseFloat(timeStr);
  // 用"执行人|团队|工作内容"作为唯一键,确保不会重复计算
  const key = `${person}|${team}|${activity}`;
  aggregatedData[key] = (aggregatedData[key] || 0) + time;
});

第二步:提取分类(执行人)和系列(团队+工作内容)

接下来我们需要分别提取FusionCharts需要的categories(X轴的执行人)和dataset中的系列(每个系列对应一个"团队-工作内容"的组合):

// 提取去重的执行人作为X轴分类
const uniquePersons = [...new Set(objectarray.map(item => item[3]))];
const categories = {
  category: uniquePersons.map(person => ({ label: person }))
};

// 提取所有唯一的"团队-工作内容"组合作为图表系列
const uniqueSeries = [...new Set(objectarray.map(item => `${item[2]} - ${item[1]}`))];

第三步:构建FusionCharts的数据集

现在要为每个系列生成对应的data数组,遍历每个执行人,查找他们在该系列下的总耗时(如果没有记录就设为0):

const dataset = uniqueSeries.map(series => {
  const [team, activity] = series.split(' - ');
  return {
    seriesname: series,
    data: uniquePersons.map(person => {
      const key = `${person}|${team}|${activity}`;
      // 没有对应数据时填充0,保留两位小数保证格式统一
      const value = aggregatedData[key] || 0;
      return { value: value.toFixed(2) };
    })
  };
});

第四步:组合成完整的FusionCharts配置

最后把所有部分拼接成符合要求的JSON结构,你可以直接把这个配置传给FusionCharts初始化:

const fusionChartConfig = {
  chart: {
    theme: "fusion",
    caption: "工作耗时统计",
    subCaption: "按执行人、服务团队及工作内容分类",
    xAxisname: "执行人",
    yAxisName: "耗时(小时)",
    showSum: "1",
    numberSuffix: "h",
    stacked: "1", // 开启堆叠柱状图模式
    type: "column2d" // 换成bar2d可生成横向条形图
  },
  categories: [categories],
  dataset: dataset
};

// 初始化并渲染图表
new FusionCharts({
  type: 'column2d',
  renderAt: 'chart-container',
  width: '100%',
  height: '500',
  dataFormat: 'json',
  dataSource: fusionChartConfig
}).render();

关键说明

  • 聚合逻辑:用字符串拼接的键确保每个"执行人-团队-工作内容"组合唯一,避免重复计算;
  • 缺失数据处理:如果某个执行人没有对应系列的耗时,自动填充0,保证图表数据结构完整;
  • 堆叠配置:通过chart.stacked: "1"开启堆叠模式,完美实现同类型耗时的合并展示;

这样处理后,你提供的示例数据会生成:

  • X轴分类:James、John
  • 系列:Team 1 - Ad-hoc queries or calls(James总耗时4.00h)、Team 2 - Advice(James总耗时1.00h)等,完全符合FusionCharts的格式要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:43:26