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
相关产品推荐
相关产品推荐

