You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JS中高效分组转换数组为指定JSON格式的最优方案

问题描述

现有一个含动态键的对象数组(输入示例如下),需将其转换为按Key1、Key2分组,以editedDate为键存储对应数据的JSON格式(目标输出示例如下)。数据量可能超过5万条,此前使用多层循环实现存在性能卡顿,尝试arquero SQL也未得到目标结果,寻求高效实现方法。

输入示例

[
{ 
    Key1 : "Value 1",
    Key2 : "Value 2",
    editedDate : "2024-03-04",
    editedValue : 10,
    editedLock : 1
},
{ 
    Key1 : "Value 1",
    Key2 : "Value 2",
    editedDate : "2024-03-11",
    editedValue : 10,
    editedLock : 1
},
{ 
    Key1 : "Value 1_1",
    Key2 : "Value 2_1",
    editedDate : "2024-03-04",
    editedValue : 10,
    editedLock : 1
},
{ 
    Key1 : "Value 1_1",
    Key2 : "Value 2_1",
    editedDate : "2024-03-11",
    editedValue : 10,
    editedLock : 1
}
]

目标输出示例

[
    {
        Key1: "Value 1",
        Key2: "Value 2",
        "2024-03-04": {
            editedValue: 10,
            editedLock: 1
        },
        "2024-03-11": {
            editedValue: 10,
            editedLock: 1
        }
    },
    {
        Key1: "Value 1_1",
        Key2: "Value 2_1",
        "2024-03-04": {
            editedValue: 10,
            editedLock: 1
        },
        "2024-03-11": {
            editedValue: 10,
            editedLock: 1
        }
    }
]

高效实现方案

采用单次循环+哈希映射的方式处理,时间复杂度为O(n),是大数据量场景下的最优选择,彻底避免多层循环带来的O(n²)性能损耗。核心逻辑是用Key1和Key2拼接成唯一标识作为哈希表索引,快速定位分组对象并直接更新对应日期的数据。

JavaScript实现代码

function transformData(inputArray) {
    const groupMap = new Map();
    for (const item of inputArray) {
        // 生成唯一分组键,确保Key1+Key2组合不重复
        const uniqueKey = `${item.Key1}_${item.Key2}`;
        let groupItem = groupMap.get(uniqueKey);

        if (!groupItem) {
            // 首次创建分组对象
            groupItem = {
                Key1: item.Key1,
                Key2: item.Key2
            };
            groupMap.set(uniqueKey, groupItem);
        }

        // 将当前日期的数据挂载到分组对象上
        groupItem[item.editedDate] = {
            editedValue: item.editedValue,
            editedLock: item.editedLock
        };
    }

    // 将Map中的分组对象转换为数组输出
    return Array.from(groupMap.values());
}

// 测试示例
const inputData = [
    { Key1: "Value 1", Key2: "Value 2", editedDate: "2024-03-04", editedValue: 10, editedLock: 1 },
    { Key1: "Value 1", Key2: "Value 2", editedDate: "2024-03-11", editedValue: 10, editedLock: 1 },
    { Key1: "Value 1_1", Key2: "Value 2_1", editedDate: "2024-03-04", editedValue: 10, editedLock: 1 },
    { Key1: "Value 1_1", Key2: "Value 2_1", editedDate: "2024-03-11", editedValue: 10, editedLock: 1 }
];

const outputData = transformData(inputData);
console.log(JSON.stringify(outputData, null, 2));

方案优势

  • 仅遍历一次输入数组,5万条数据可毫秒级处理
  • 用Map实现哈希映射,分组查找操作时间复杂度为O(1)
  • 逻辑简洁无冗余,内存占用可控,不会出现性能瓶颈

内容的提问来源于stack exchange,提问作者Vivek

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 22:20:31