JS中按共有属性gwdetailsid合并重组对象数组的高效实现方法
JS对象数组合并最优方案
针对按gwdetailsid合并对象、提取gwpname/gwpvalue为键值对的需求,最优实现的时间复杂度为O(n),仅需单轮遍历即可完成,适合任意规模的数组处理:
实现代码
// 原始输入数据 const input = { "data": [ { "gwdetailsid": "gw1", "gwpname": "username", "gwpvalue": "transalis" }, { "gwdetailsid": "gw1", "gwpname": "password", "gwpvalue": "secure_password@1" }, { "gwdetailsid": "gw2", "gwpname": "username", "gwpvalue": "tesco" }, { "gwdetailsid": "gw2", "gwpname": "password", "gwpvalue": "lemon_farmer_2" } ] } // 临时映射表存储分组数据 const idMap = {} input.data.forEach(item => { // 不存在对应分组时初始化 if (!idMap[item.gwdetailsid]) { idMap[item.gwdetailsid] = { gwdetailsid: item.gwdetailsid } } // 追加属性键值对 idMap[item.gwdetailsid][item.gwpname] = item.gwpvalue }) // 生成最终输出结构 const output = { gateways: Object.values(idMap) }
逻辑说明
- 用哈希表做临时存储,避免了双重循环的冗余匹配,性能远高于O(n²)的过滤去重方案
- 遍历过程中直接完成属性赋值,无需额外处理中间结构
- 最终通过
Object.values()直接将映射表转为目标数组,得到的结果完全匹配需求的输出结构
内容的提问来源于stack exchange,提问作者Mark
相关产品推荐
相关产品推荐

