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

Rails:特定键值相同时如何合并数组中的哈希?

合并数组中相同ID的对象,拼接指定字段

这问题我之前也碰到过,用JavaScript的reduce方法就能轻松实现需求,直接上代码和详细解释:

代码实现

const originalArray = [
  { id: 77, member_phone: "9876543210", created_at: "2017-05-03T11:06:03.000Z", name: "Sure" },
  { id: 77, member_phone: "123456789", created_at: "2017-05-03T11:06:03.000Z", name: "Sure" },
  { id: 78, member_phone: "12345", created_at: "2017-05-03T11:06:03.000Z", name: "XYZ" }
];

// 核心逻辑:用reduce分组,再合并指定字段
const mergedArray = Object.values(
  originalArray.reduce((groupedObj, currentItem) => {
    // 以id作为分组的唯一标识
    const groupKey = currentItem.id;
    
    if (!groupedObj[groupKey]) {
      // 如果该id还没分组,直接复制当前对象到分组中
      groupedObj[groupKey] = { ...currentItem };
    } else {
      // 已有分组,把member_phone用逗号拼接
      groupedObj[groupKey].member_phone += `,${currentItem.member_phone}`;
    }
    
    return groupedObj;
  }, {}) // 初始值是一个空对象,用来存储分组结果
);

console.log(mergedArray);

代码解释

  1. 分组逻辑:通过reduce遍历原数组,把相同id的对象归到同一个分组里,分组的键就是id值。
  2. 字段合并:第一次遇到某个id时,直接把对象拷贝到分组中;后续再遇到相同id的对象,就把它的member_phone追加到已有对象的member_phone后面,用逗号分隔。
  3. 转换为数组:最后用Object.values()把分组对象里的所有值提取出来,就是我们需要的合并后数组。

注意:如果相同id的对象中,created_at、name这类字段可能存在不一致的情况,你可以根据需求调整逻辑,比如保留第一个对象的字段值,或者做其他处理——不过根据你的示例,这些字段都是相同的,所以上面的代码完全适用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 08:25:16