使用Lodash进行深度合并

我有两个对象数组,其中包含具有标签的地址和实际地址的对象:

var originaladdress=[
{
标签:“家”,
地址:{城市:伦敦,邮编:12345}
},
{
标签:“工作”,
地址:{纽约市,邮编:'54321'}
}
];
var UPDATEDADDRESS=[
{
标签:“家”,
地址:{城市:'London(Central)},国家:'UK'}
},
{
标签:“西班牙”,
地址:{城市:'马德里',邮编:'55555'}
}
];

现在我想通过label合并这些数组,比较地址的各个属性,并只合并实际存在的新地址的属性。所以结果应该是这样的:

var结果=[
{
标签:“家”,
地址:{城市:'London(Central)',邮编:'12345',国家:'UK'}
},
{
标签:“工作”,
地址:{纽约市,邮编:'54321'}
},
{
标签:“西班牙”,
地址:{城市:'马德里',邮编:'55555'}
}
]

如何使用lodash做到这一点?我尝试了unionBy()merge()的组合。使用unionBy()我可以通过标签比较和连接数组,但这总是会替换整个对象。我当然可以合并地址,但这不会发生在标签

您可以使用.keyBy(arr,'label')将两个数组转换为对象,然后使用.merge()进行深度合并:

var originaladdress=[{
标签:“家”,
地址:{
城市:“伦敦”,
zipCode:'12345'
}
}, {
标签:“工作”,
地址:{
城市:“纽约”,
zipCode:'54321'
}
}];
var UPDATEDADDRESS=[{
标签:“家”,
地址:{
城市:伦敦(中央),
国家:'英国'
}
}, {
标签:“西班牙”,
地址:{
城市:“马德里”,
zipCode:'55555'
}
}];
var结果=\ u0.values(\ u0.merge(
_.keyBy(原始地址,“标签”),
_.keyBy(更新的地址,“标签”)
));
控制台日志(结果)
<脚本src=”https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js“&gt&lt/脚本&gt

发表评论