如何对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
相关产品推荐
相关产品推荐

