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

JavaScript 如何基于指定键合并数组中的多个对象?

JavaScript实现按指定键合并对象方案

实现思路

  • 用Map作为分组缓存,把FromSize+ToSize的组合值作为唯一分组key
  • 遍历原数组的每一项,先拼接当前项的分组key:
    • 若缓存中不存在该key,就初始化新的分组对象,存入FromSize和ToSize两个字段
    • 往当前分组对象里添加属性,属性名取当前项的ClearityName值,属性值取对应的Price
  • 最后把缓存里的所有值转成数组,就是最终结果

实现代码

function mergeData(data) {
  const groupMap = new Map()
  data.forEach(item => {
    // 拼接唯一分组key
    const groupKey = `${item.FromSize}_${item.ToSize}`
    if (!groupMap.has(groupKey)) {
      // 不存在分组就初始化
      groupMap.set(groupKey, {
        FromSize: item.FromSize,
        ToSize: item.ToSize
      })
    }
    // 把ClearityName作为键,Price作为值加入分组对象
    const group = groupMap.get(groupKey)
    group[item.ClearityName] = item.Price
  })
  // 转成数组返回
  return Array.from(groupMap.values())
}

// 测试调用
var data = [
  { FromSize: 54, ToSize: 51, ClearityName: 'IF', Price: 56 },
  { FromSize: 54, ToSize: 51, ClearityName: 'VS', Price: 96 },
  { FromSize: 54, ToSize: 51, ClearityName: 'VSS', Price: 26 },
  { FromSize: 40, ToSize: 30, ClearityName: 'PF', Price: 36 },
  { FromSize: 40, ToSize: 30, ClearityName: 'IF', Price: 86 }
]
console.log(mergeData(data))

输出结果

和要求的结构完全一致:

[
  { FromSize: 54, ToSize: 51, IF: 56, VS: 96, VSS: 26 },
  { FromSize: 40, ToSize: 30, PF: 36, IF: 86 }
]

补充说明

如果遇到同分组下ClearityName重复的场景,默认后面的项的Price会覆盖前面的,符合常规的合并逻辑;如果需要保留所有重复值,可以自行修改逻辑将对应值改成数组存储。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 23:15:02