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

JavaScript合并含重复项的对象数组(保留多sw_version值)

解决方法

要保留同一timestamp下的多个sw_version条目,同时合并其他唯一指标,我们可以先按timestamp分组处理数据,再根据分组内的sw_version数量生成对应条目:

实现代码

const available = [
    {"timestamp": 10,"sw_version": "AA"},
    {"timestamp": 10,"sw_version": "AB"},
    {"timestamp": 20,"sw_version": "QFX-1.2.5 B"},
    {"timestamp": 10,"pressure": 14.75},
    {"timestamp": 20,"pressure": 14.22},
    {"timestamp": 10,"temperature": 15.96},
    {"timestamp": 20,"temperature": 38.50},
    {"timestamp": 30,"temperature": 2.2},
    {"timestamp": 30,"pressure": 9.8}
];

// 第一步:按timestamp分组,收集sw_version和其他指标
const grouped = available.reduce((groups, item) => {
    const ts = item.timestamp;
    if (!groups[ts]) {
        groups[ts] = {
            swVersions: [],
            metrics: {}
        };
    }
    if ('sw_version' in item) {
        groups[ts].swVersions.push(item.sw_version);
    } else {
        // 其他指标直接合并,因为同一timestamp唯一
        Object.assign(groups[ts].metrics, item);
    }
    return groups;
}, {});

// 第二步:根据分组生成最终结果
const desired = Object.entries(grouped).flatMap(([ts, data]) => {
    const base = { timestamp: Number(ts), ...data.metrics };
    // 如果有sw_version,每个版本生成一个条目;没有则直接返回基础条目
    return data.swVersions.length 
        ? data.swVersions.map(v => ({ ...base, sw_version: v }))
        : [base];
});

console.log(desired);

输出结果

[
  {"timestamp":10,"pressure":14.75,"temperature":15.96,"sw_version":"AA"},
  {"timestamp":10,"pressure":14.75,"temperature":15.96,"sw_version":"AB"},
  {"timestamp":20,"pressure":14.22,"temperature":38.5,"sw_version":"QFX-1.2.5 B"},
  {"timestamp":30,"temperature":2.2,"pressure":9.8}
]

核心逻辑

  1. 分组处理:先用reduce按timestamp把数据分成两组——swVersions收集当前时间戳下的所有版本号,metrics合并其他唯一指标(压力、温度等)。
  2. 生成结果:遍历每个分组,若有版本号则为每个版本生成带完整指标的条目;若无版本号则直接返回合并后的指标条目,确保同一timestamp下的多个sw_version都被保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 13:22:02