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

JavaScript中如何展开对象数组并合并为单个对象?

对象数组展开合并为单个平面对象实现方法

需求是将数组内每个独立对象的全部属性,整合到同一个平面对象中,例:

  • 输入:[{"one": "deleted"}, {"two": "added"}]
  • 输出:{"one": "deleted", "two": "added"}

以下是不同场景下的实现方式,所有方式默认遵循同名属性后值覆盖前值的规则,如果有特殊的键冲突处理需求,可以在合并逻辑里加自定义判断。

  • 方法1:ES6 原生Object.assign实现
    利用展开运算符把数组项拆成Object.assign的参数,直接把所有源对象的可枚举属性拷贝到空目标对象上,写法最简洁:
    const sourceArr = [{"one": "deleted"}, {"two": "added"}];
    const mergedObj = Object.assign({}, ...sourceArr);
    // mergedObj 即为合并后的结果 {one: 'deleted', two: 'added'}
    
  • 方法2:reduce配合对象展开运算符实现(ES2018+支持)
    以空对象为初始值,遍历数组时每次把当前累积对象和当前遍历对象的属性合并,作为下一次遍历的累积值:
    const sourceArr = [{"one": "deleted"}, {"two": "added"}];
    const mergedObj = sourceArr.reduce((res, current) => ({...res, ...current}), {});
    
  • 方法3:手动遍历兼容低版本环境
    如果运行环境不支持ES6+语法,可以通过两层循环手动赋值,注意用hasOwnProperty过滤掉原型链上的非自有属性:
    const sourceArr = [{"one": "deleted"}, {"two": "added"}];
    const mergedObj = {};
    for (let i = 0; i < sourceArr.length; i++) {
      const item = sourceArr[i];
      for (let key in item) {
        if (item.hasOwnProperty(key)) {
          mergedObj[key] = item[key];
        }
      }
    }
    

如果业务场景里数组中的对象存在同名键,且不需要后值覆盖前值,可以在赋值前判断键是否已存在,按需做值拼接、转数组存储等自定义处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 18:21:52