首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

JavaScript 字符串處理:將時間序列轉換為鍵值對結構

     編輯:程式設計疑難解答

需求澄清

原始數據為時間字符串數組(如 `["2016-02-03 01", "2016-02-04 15", ...]`),需轉換為 **Key-Value 結構**,但未明確 Key/Value 分別對應什麼。常見場景:

場景一:以日期為 Key,統計出現次數

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 }

場景二:以完整時間為 Key,值為業務數據(如溫度、訂單量)

// 假設有對應值數組
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 是什麼?是否需要去重/聚合?
  • **時間標準化**:統一用 `YYYY-MM-DD HH:mm` 或 ISO 8601,便於排序/查詢。
  • **大數據量**:考慮 `Map` 對象而非普通對象,保持插入順序、鍵類型靈活。

請補充具體「Key 對應什麼、Value 對應什麼」,即可給出精確代碼。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved