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

如何优雅合并存在重复键的两个Javascript对象且不覆盖原有属性

JavaScript重复键类数组对象合并方案

你要实现的是两个键为自增数字的类数组对象的顺序拼接,而非同键属性合并,以下是更简洁的实现方案:

方案1 兼容性写法

兼容ES2017及以上所有运行环境,一行代码实现:

const obj3 = Object.assign({}, Object.values(obj1).concat(Object.values(obj2)));

实现逻辑:

  • 用Object.values()分别取出两个对象按数字键升序排列的所有值,得到两个数组
  • 通过数组concat()方法拼接两个值数组
  • Object.assign()会自动将数组的索引作为新对象的键,最终输出完全符合你预期的结果。

方案2 ES6+简洁写法

如果你的运行环境支持ES6展开语法,可以写得更短:

const obj3 = {...[...Object.values(obj1), ...Object.values(obj2)]};

注意点

你现有实现存在隐患:普通对象没有内置length属性,只有真实数组、或手动添加了length属性的特殊类数组对象才能读取到length值,普通场景下obj2.length会返回undefined导致循环不生效,上述两种方案不存在这个问题,适配所有键为自增数字的对象场景。


目前ECMAScript没有专门针对这类场景的独立内置方法,但是用现有内置API组合的写法已经足够简洁,可维护性也比手动循环更高。

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

相关产品推荐
方舟 Agent Plan

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

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