合并对象并同步差异:缺失项添加与item1属性更新需求
合并两个对象并更新指定属性的解决方案
看起来你需要把object_one的内容合并到object_two里,同时满足新增不存在的键和更新已有键的item1属性这两个需求。我来给你一个清晰的JavaScript实现方案:
首先先明确我们的输入对象(我给它们补了具体示例值方便理解):
const object_one = { 1: { item1: 'updated_item1_1' }, // 标注的updated最新数据 2: { item1: 'updated_item1_2' }, 3: { item1: 'updated_item1_3' } }; const object_two = { 1: { item1: 'old_item1_1', item2: 'item2_1', item3: 'item3_1' }, 2: { item1: 'old_item1_2', item2: 'item2_2', item3: 'item3_2' }, 4: { item1: 'old_item1_4', item2: 'item2_4', item3: 'item3_4' }, 5: { item1: 'old_item1_5', item2: 'item2_5', item3: 'item3_5' } };
方案1:直接修改原object_two
这个方案会直接更新object_two,适合不需要保留原对象的场景:
// 遍历object_one的所有自有属性键 for (const key in object_one) { if (object_one.hasOwnProperty(key)) { // 判断object_two是否已有该键 if (object_two.hasOwnProperty(key)) { // 保留原对象的item2、item3,替换item1为最新版本 object_two[key] = { ...object_two[key], item1: object_one[key].item1 }; } else { // 新增不存在的键值对到object_two object_two[key] = { ...object_one[key] }; } } }
执行后object_two的结果:
{ 1: { item1: 'updated_item1_1', item2: 'item2_1', item3: 'item3_1' }, 2: { item1: 'updated_item1_2', item2: 'item2_2', item3: 'item3_2' }, 4: { item1: 'old_item1_4', item2: 'item2_4', item3: 'item3_4' }, 5: { item1: 'old_item1_5', item2: 'item2_5', item3: 'item3_5' }, 3: { item1: 'updated_item1_3' } }
方案2:返回新对象,不修改原对象
如果你需要保留原始的object_one和object_two,可以创建一个新的合并对象:
// 先复制object_two的所有内容到新对象 const mergedObject = { ...object_two }; // 遍历object_one进行合并更新 for (const key in object_one) { if (object_one.hasOwnProperty(key)) { mergedObject[key] = mergedObject[key] ? { ...mergedObject[key], item1: object_one[key].item1 } // 已有键则更新item1 : { ...object_one[key] }; // 无此键则添加 } }
代码说明
- 使用
hasOwnProperty是为了避免遍历到对象原型链上的属性,保证只处理我们定义的自有属性 - 对象展开运算符
...用来浅拷贝对象属性,这样修改新对象不会影响原对象的引用 - 对于已有键的处理,我们保留原对象的所有其他属性(比如
item2、item3),只替换item1为object_one中的最新版本
内容的提问来源于stack exchange,提问作者Ryan Turnbull
相关产品推荐
相关产品推荐

