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

如何将两个JavaScript对象合并为键值为数组的对象?

合并对象重复键为数组的实现方案

嘿,这个问题很实用!先直接给你明确结论:单纯靠扩展运算符(spread operator)没办法直接实现这种把重复键的值合并成数组的需求——因为扩展运算符处理对象重复键时,后面对象的键值会直接覆盖前面的,没法自动把多个值打包成数组。

最简单的实现方式

如果只是针对这一个特定的重复键,最直接的写法就是手动把两个值放到数组里:

const obj1 = { "1,1": "hello" };
const obj2 = { "1,1": "hi" };

const obj3 = {
  "1,1": [obj1["1,1"], obj2["1,1"]]
};

通用的合并函数(支持多键/多对象)

如果需要处理更复杂的场景(比如多个重复键、多个对象),可以写一个通用的合并函数,遍历所有对象的键值对,自动把重复键的值合并成数组:

function mergeObjectsWithArrayValues(...objects) {
  const merged = {};
  
  objects.forEach(obj => {
    Object.entries(obj).forEach(([key, value]) => {
      if (merged[key]) {
        // 若键已存在,判断当前值是否为数组,再添加新值
        merged[key] = Array.isArray(merged[key]) 
          ? [...merged[key], value] 
          : [merged[key], value];
      } else {
        merged[key] = value;
      }
    });
  });
  
  return merged;
}

// 使用示例
const obj1 = { "1,1": "hello", "2,2": "foo" };
const obj2 = { "1,1": "hi", "2,2": "bar" };
const obj3 = mergeObjectsWithArrayValues(obj1, obj2);
// 输出:{ "1,1": ["hello", "hi"], "2,2": ["foo", "bar"] }

为什么扩展运算符不行?

试一下用扩展运算符合并的话:

const obj3 = {...obj1, ...obj2};
// 结果是 { "1,1": "hi" }

这里obj2的"1,1"值直接覆盖了obj1的,完全达不到合并成数组的效果,所以扩展运算符只能处理无重复键的对象合并,没法满足你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:58:22