ben*_*man 15 javascript arrays merge lodash
我有两个对象数组,其中包含具有标签和实际地址对象的地址:
var originalAddresses = [
{
label: 'home',
address: { city: 'London', zipCode: '12345' }
},
{
label: 'work',
address: { city: 'New York', zipCode: '54321' }
}
];
var updatedAddresses = [
{
label: 'home',
address: { city: 'London (Central)', country: 'UK' }
},
{
label: 'spain',
address: { city: 'Madrid', zipCode: '55555' }
}
];
Run Code Online (Sandbox Code Playgroud)
现在我想合并这些数组label
并比较地址的各个属性,并仅合并实际存在的新地址的属性.所以结果应该是这样的:
var result = [
{
label: 'home',
address: { city: 'London (Central)', zipCode: '12345', country: 'UK' }
},
{
label: 'work',
address: { city: 'New York', zipCode: '54321' }
},
{
label: 'spain',
address: { city: 'Madrid', zipCode: '55555' }
}
]
Run Code Online (Sandbox Code Playgroud)
我怎么能用lodash做到这一点?我试过的组合unionBy()
和merge()
.使用unionBy(),我能够按标签比较和连接数组,但这总是替换整个对象.我可以肯定合并地址,但这不会发生在标签上.
Ori*_*ori 21
您可以使用_.keyBy(arr, 'label')
,然后使用_.merge()
以下方法将两个数组转换为对象:
var originalAddresses = [{
label: 'home',
address: {
city: 'London',
zipCode: '12345'
}
}, {
label: 'work',
address: {
city: 'New York',
zipCode: '54321'
}
}];
var updatedAddresses = [{
label: 'home',
address: {
city: 'London (Central)',
country: 'UK'
}
}, {
label: 'spain',
address: {
city: 'Madrid',
zipCode: '55555'
}
}];
var result = _.values(_.merge(
_.keyBy(originalAddresses, 'label'),
_.keyBy(updatedAddresses, 'label')
));
console.log(result);
Run Code Online (Sandbox Code Playgroud)
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.15.0/lodash.min.js"></script>
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
29481 次 |
最近记录: |