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

Node.js中如何使用Underscore合并两个对象数组并补全默认值?

问题原因

_.extend 是用于合并对象顶层属性的方法,你传入两个数组作为参数时,它会将数组视作「索引为键、数组项为值」的对象,直接用data1的索引0-3项覆盖data2对应索引的项,不会按照key字段做匹配,因此结果不符合预期。

解决方案

我们可以先将data1处理为以key为键的映射表,再遍历data2匹配合并count字段:

// 第一步:将data1转为key -> 对应项的映射表,方便快速查找
const countMap = _.indexBy(data1, 'key');

// 第二步:遍历data2,合并count字段
const result = _.map(data2, item => {
  const matchedItem = countMap[item.key];
  // 匹配到就取对应count,没匹配到默认设为0
  return _.extend({}, item, { count: matchedItem ? matchedItem.count : 0 });
});

console.log(result);

如果不需要给未匹配项填充默认的0,只保留匹配项的count字段,可以修改为:

const result = _.map(data2, item => {
  const matchedItem = countMap[item.key];
  return matchedItem ? _.extend({}, item, { count: matchedItem.count }) : _.clone(item);
});

如果允许直接修改原data2的数组项,可以省略clone的步骤直接修改原对象,减少内存开销。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 17:06:02