【ECharts】使用 ECharts 处理不同时间节点的数据系列展示

时间:2024-07-19 07:23:43
function aggregateData(stations) { // 生成新的时间点,五分钟一个间隔 function generateTimePoints(startTime, endTime) { let times = []; let current = new Date(startTime); while (current <= endTime) { times.push(current.toTimeString().substring(0, 5)); current.setMinutes(current.getMinutes() + 5); } return times; } // 解析时间字符串为Date对象 function parseTime(timeStr) { let parts = timeStr.split(":"); let date = new Date(); date.setHours(parseInt(parts[0]), parseInt(parts[1]), 0, 0); return date; } // 初始化新的时间点 let allProduceTimes = []; stations.forEach(station => { station.targets.forEach(target => { target.produceTime.forEach(time => { allProduceTimes.push(parseTime(time)); }); }); }); let minTime = new Date(Math.min.apply(null, allProduceTimes)); let maxTime = new Date(Math.max.apply(null, allProduceTimes)); let newProduceTimes = generateTimePoints(minTime, maxTime); // 重新填充数据 stations.forEach(station => { station.targets.forEach(target => { let newData = new Array(newProduceTimes.length).fill(0); let index = 0; target.produceTime.forEach((time, i) => { let parsedTime = parseTime(time); while (index < newProduceTimes.length && parsedTime >= parseTime(newProduceTimes[index])) { index++; } if (index > 0) { newData[index - 1] = parseFloat(target.data[i]); } }); target.produceTime = newProduceTimes; target.data = newData.map(value => value.toFixed(1)); // 保留一位小数 }); }); return stations; } // 示例输入 let stations = [ { "inverterno": "2005435242250085", "targets": [ { "value": "todayEnergy", "unit": 4, "data": [ "22.3", "23.3", "24.2", "25.2", "26.1", "26.9", "27.8", "28.6", "29.3", "30.0", "30.7", "31.4", "32.0", "32.5", "33.2", "33.8", "34.4", "35.0", "35.6", "36.2" ], "produceTime": [ "05:39", "05:44", "05:49", "05:54", "05:59", "06:04", "06:09", "06:14", "06:19", "06:24", "06:29", "06:34" ] }, { "value": "totalEnergy", "unit": 4, "data": [ "1797.0", "1797.0", "1798.0", "1799.0", "1799.0", "1800.0", "1801.0", "1801.0", "1802.0", "1802.0", "1803.0", "1804.0" ], "produceTime": [ "05:39", "05:44", "05:49", "05:54", "05:59", "06:04", "06:09", "06:14", "06:19", "06:24", "06:29", "06:34" ] } ] }, { "inverterno": "2005435242250086", "targets": [ { "value": "todayEnergy", "unit": 4, "data": [ "0.0", "0.0", "0.0", "0.1", "0.1", "0.1", "0.1", "0.1", "0.1", "0.1", "0.2", "0.2", "0.2", "0.3", "0.4", "0.4", "0.5", "0.6", "0.7" ], "produceTime": [ "05:27", "05:32", "05:37", "05:42", "05:47", "05:52", "05:57", "06:02", "06:07", "06:12", "06:17", "06:22" ] }, { "value": "totalEnergy", "unit": 4, "data": [ "1106.0", "1106.0", "1106.0", "1106.0", "1106.0", "1106.0", "1106.0", "1106.0", "1106.0", "1106.0", "1106.0", "1106.0" ], "produceTime": [ "05:27", "05:32", "05:37", "05:42", "05:47", "05:52", "05:57", "06:02", "06:07", "06:12", "06:17", "06:22" ] } ] } ]; let aggregatedStations = aggregateData(stations); console.log(JSON.stringify(aggregatedStations, null, 2));