Skip to content

Commit 32a875d

Browse files
committed
Optimize category collection in chart data processing
Replace the iterative series filtering with a flatMap initialization and remove series from processing when they have no more data points
1 parent ee156d9 commit 32a875d

File tree

1 file changed

+5
-8
lines changed

1 file changed

+5
-8
lines changed

sqlpage/apexcharts.js

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -63,14 +63,8 @@ sqlpage_chart = (() => {
6363
const pointers = series.map((_) => 0); // Index of current data point in each series
6464
const x_at = (series_idx) =>
6565
series[series_idx].data[pointers[series_idx]].x;
66-
let series_idxs = Array.from({ length: series.length }, (_, i) => i);
67-
while (true) {
68-
// indices of series that have data points left
69-
series_idxs = series_idxs.filter(
70-
(i) => pointers[i] < series[i].data.length,
71-
);
72-
if (series_idxs.length === 0) break;
73-
66+
const series_idxs = series.flatMap((s, i) => (s.data.length ? i : []));
67+
while (series_idxs.length > 0) {
7468
let idx_of_xmin = series_idxs[0];
7569
for (const series_idx of series_idxs) {
7670
if (x_at(series_idx) < x_at(idx_of_xmin)) idx_of_xmin = series_idx;
@@ -79,6 +73,9 @@ sqlpage_chart = (() => {
7973
const new_category = x_at(idx_of_xmin);
8074
if (!categoriesSet.has(new_category)) categoriesSet.add(new_category);
8175
pointers[idx_of_xmin]++;
76+
if (pointers[idx_of_xmin] >= series[idx_of_xmin].data.length) {
77+
series_idxs.splice(series_idxs.indexOf(idx_of_xmin), 1);
78+
}
8279
}
8380
// Create a map of category -> value for each series and rebuild
8481
return series.map((s) => {

0 commit comments

Comments
 (0)