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

如何将数组中任意数量的对象合并为单个JavaScript对象?

解决方案

针对你的场景的核心实现

用Array.prototype.reduce就能完成合并,关键是设置正确的初始值,并在迭代中逐步合并每个元素的config对象:

const originalArray = [
    { "config": { "holes": 18 } },
    { "config": { "single_cart": false } },
    { "config": { "shared_cart": false } },
    { "config": { "caddie": false } },
    { "config": { "transfers": false } },
    { "config": { "meals": false } },
    { "config": { "all_inclusive": false } }
];

const mergedResult = originalArray.reduce((acc, current) => {
    // 用展开运算符合并当前元素的config到累加器的config中
    acc.config = { ...acc.config, ...current.config };
    return acc;
}, { config: {} }); // 初始值必须预设空的config对象,避免首次合并报错

console.log(mergedResult);

通用化适配(支持任意键名)

如果数组元素的键不是固定的config,而是任意动态键名,可改成遍历当前元素的所有键进行合并:

const mergedResult = originalArray.reduce((acc, current) => {
    for (const key in current) {
        // 若累加器中无当前键,先初始化空对象
        if (!acc[key]) acc[key] = {};
        // 合并当前键对应的子对象
        acc[key] = { ...acc[key], ...current[key] };
    }
    return acc;
}, {});

你之前用reduce失败的常见原因

  • 初始值设置错误:比如直接用{}作为初始值,首次迭代时acc.config为undefined,展开会导致异常,必须预设目标键的空对象。
  • 合并逻辑疏漏:没有正确将每个子对象的属性合并到同一个父键下,而是覆盖了整个父对象。

也可以用Object.assign替代展开运算符,效果完全一致:

acc.config = Object.assign({}, acc.config, current.config);

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.19 09:55:22