原始數據為時間字符串數組(如 `["2016-02-03 01", "2016-02-04 15", ...]`),需轉換為 **Key-Value 結構**,但未明確 Key/Value 分別對應什麼。常見場景:
const times = ["2016-02-03 01", "2016-02-03 05", "2016-02-04 15"];
const countByDate = times.reduce((acc, t) => {
const date = t.split(' ')[0]; // "2016-02-03"
acc[date] = (acc[date] || 0) + 1;
return acc;
}, {});
// 結果: { "2016-02-03": 2, "2016-02-04": 1 }
// 假設有對應值數組
const values = [18, 20, 22];
const map = times.reduce((acc, t, i) => {
acc[t] = values[i];
return acc;
}, {});
// 結果: { "2016-02-03 01": 18, "2016-02-03 05": 20, ... }
const grouped = times.reduce((acc, t) => {
const [date, hour] = t.split(' ');
(acc[date] = acc[date] || []).push(hour);
return acc;
}, {});
// 結果: { "2016-02-03": ["01", "05"], "2016-02-04": ["15"] }
function parseTimeSeries(times, { keyFn, valueFn = (_, i) => i } = {}) {
return times.reduce((acc, t, i) => {
const k = keyFn ? keyFn(t, i) : t;
const v = valueFn(t, i);
if (Array.isArray(acc[k])) acc[k].push(v);
else if (k in acc) acc[k] = [acc[k], v];
else acc[k] = v;
return acc;
}, {});
}
// 用法
parseTimeSeries(times, { keyFn: t => t.split(' ')[0] }); // 按日期分組
parseTimeSeries(times, { keyFn: t => t, valueFn: (_, i) => values[i] }); // 完整映射
請補充具體「Key 對應什麼、Value 對應什麼」,即可給出精確代碼。