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

JavaScript如何合并数组中的多个对象为单个对象?

数组合并多对象实现方案

你之前使用Object.assign()没有成功的核心原因是:Object.assign()要求接收多个对象作为入参,直接传入数组结构是无法完成合并的,需要先把数组里的对象展开作为参数传入即可。

方案1:展开数组 + Object.assign 实现

这是最简洁的实现方式,适合所有支持ES6扩展运算符的环境:

const test = [{name: ""}, {age: ""}, {nac: ""}];
const test2 = [Object.assign({}, ...test)];

说明:通过扩展运算符...把数组里的3个对象展开为Object.assign()的入参,所有属性会合并到第一个参数的空对象中,最后外层包裹数组就是你要的输出格式。

方案2:reduce遍历合并(兼容性更好)

如果需要兼容不支持扩展运算符的旧环境,或者数组内对象数量较多时,用reduce方法更稳妥:

const test = [{name: ""}, {age: ""}, {nac: ""}];
const mergedObj = test.reduce((accumulator, currentObj) => {
  return Object.assign(accumulator, currentObj);
}, {});
const test2 = [mergedObj];

说明:reduce会遍历数组的每一个对象,把当前对象的属性逐步合并到累加器accumulator中,初始值设置为空对象避免修改原数组内的对象。

方案3:纯对象扩展运算符实现

ES2018之后支持对象扩展运算符,可以完全替代Object.assign(),代码可读性更高:

const test = [{name: ""}, {age: ""}, {nac: ""}];
const test2 = [test.reduce((acc, curr) => ({...acc, ...curr}), {})];

注意事项

以上所有方案的合并逻辑都是一致的:如果数组内多个对象存在同名属性,后出现的对象的属性值会覆盖先出现的对象的属性值,和Object.assign()的默认行为保持一致。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.12 09:12:03