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

Node.js中合并两个数组对象失败,寻求正确实现方案

问题分析与解决方案

你的问题核心在于函数逻辑和输入类型不匹配:你编写的json_concat是针对对象的键值对合并逻辑,但传入的却是数组,导致遍历索引时只是替换了原数组的元素,而非追加新元素,自然得不到预期的合并结果。

为什么原代码不生效?

来看你函数里的核心逻辑:

for (var key in o2) {
  o1[key] = o2[key];
}

当o2是数组时,key对应的是数组的索引(0、1、2),这段代码相当于把o1[0]替换成o2[0],o1[1]替换成o2[1]……最终o1的长度还是3,没有新增任何元素,和你想要的追加合并完全不是一回事。

正确的实现方式

数组合并有非常简洁的原生方法,如果你需要保持异步Promise的形式,这里提供几种实用方案:

方案1:使用数组原生concat方法(推荐,不修改原数组)

concat会返回一个全新的数组,包含两个输入数组的所有元素,不会改变原数组的数据:

var json_concat = async (arr1, arr2) => {
  return new Promise((resolve, reject) => {
    try {
      const mergedArray = arr1.concat(arr2);
      resolve(mergedArray);
    } catch (e) {
      reject(e);
    }
  });
}

方案2:使用ES6扩展运算符(更简洁)

扩展运算符可以快速展开数组元素,轻松构建合并后的新数组:

var json_concat = async (arr1, arr2) => {
  return new Promise((resolve, reject) => {
    try {
      const mergedArray = [...arr1, ...arr2];
      resolve(mergedArray);
    } catch (e) {
      reject(e);
    }
  });
}

方案3:修改原数组(不推荐,会改变输入数组)

如果你一定要修改原数组arr1,可以用push配合扩展运算符把arr2的所有元素追加到arr1末尾:

var json_concat = async (arr1, arr2) => {
  return new Promise((resolve, reject) => {
    try {
      arr1.push(...arr2);
      resolve(arr1);
    } catch (e) {
      reject(e);
    }
  });
}

测试调用

不管用哪种方案,调用方式都是一致的:

var a = [{a:1}, {b:2}, {c:3} ];
var b = [{a:1}, {b:2}, {c:3} ];

json_concat(a, b).then(c => {
  console.log(c); // 输出预期结果:[{a:1}, {b:2}, {c:3}, {a:1}, {b:2}, {c:3}]
});

额外提示

如果你的场景没有异步操作的需求,其实完全不需要把数组合并包成Promise,直接用a.concat(b)或者[...a, ...b]就能得到你想要的合并数组,高效又简洁。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 13:37:58