我有两个对象数组,其中包含具有标签的地址和实际地址的对象:
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“></脚本>