Skip to content

Commit 511050e

Browse files
committed
perf: optimize date lookup performance by using a Map for O(1) access, reduces time complexity from O(n×m) to O(n+m)
1 parent da11f7c commit 511050e

File tree

1 file changed

+9
-13
lines changed

1 file changed

+9
-13
lines changed

src/shared/src/date.ts

Lines changed: 9 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -80,23 +80,19 @@ export function getDateArray<T extends { date: string }>(
8080
const { diff, add, normalize } = createDateUnitFn(unit, timezone);
8181
const n = diff(endDate, startDate) + 1;
8282

83-
function findData(date: dayjs.Dayjs) {
84-
const target = data.find((item) => {
85-
if (timezone) {
86-
return normalize(dayjs.tz(item.date, timezone)).unix() === date.unix();
87-
} else {
88-
return normalize(dayjs(item.date)).unix() === date.unix();
89-
}
90-
});
91-
92-
return { ...defaultItem, ...target };
93-
}
83+
const dataMap = new Map<number, T>();
84+
data.forEach((item) => {
85+
const timestamp = timezone
86+
? normalize(dayjs.tz(item.date, timezone)).valueOf()
87+
: normalize(dayjs(item.date)).valueOf();
88+
dataMap.set(timestamp, item);
89+
});
9490

9591
for (let i = 0; i < n; i++) {
9692
const t = normalize(add(startDate, i));
97-
const item = findData(t);
93+
const target = dataMap.get(t.valueOf());
9894

99-
arr.push({ ...item, date: formatDate(t, timezone) } as T);
95+
arr.push({ ...defaultItem, ...target, date: formatDate(t, timezone) } as T);
10096
}
10197

10298
return arr;

0 commit comments

Comments
 (0)