如何使用lodash合并两个对象数组? [英] How to merge two array of object by using lodash?
问题描述
我有两个数组,其中包含一个公共字段成员。如何轻松合并主题?
例如:
var arr1 = [{
member:ObjectId(57989cbe54cf5d2ce83ff9d6),
bank:ObjectId(575b052ca6f66a5732749ecc),
country:ObjectId (575b0523a6f66a5732749ecb)
},
{
member:ObjectId(57989cbe54cf5d2ce83ff9d8),
bank:ObjectId(575b052ca6f66a5732749ecc),
country:ObjectId(575b0523a6f66a5732749ecb)
}];
var arr2 = [{
member:ObjectId(57989cbe54cf5d2ce83ff9d6),
name:'xxxxxx',
age:25
},
{
会员:ObjectId(57989cbe54cf5d2ce83ff9d8),
name:'yyyyyyyyyy',
年龄:26
}];
预期:
var merge = [{
member:ObjectId(57989cbe54cf5d2ce83ff9d6),
bank:ObjectId(575b052ca6f66a5732749ecc),
country:ObjectId(575b0523a6f66a5732749ecb),
name:'xxxxxx',
age:25
},
{
成员:ObjectId(57989cbe54cf5d2ce83ff9d8),
bank:ObjectId(575b052ca6f66a5732749ecc),
country:ObjectId(575b0523a6f66a5732749ecb),
name:'yyyyyyyyyy' ,
年龄:26
}];
我试过
var merge = _.unionBy(arr1,arr2,'member');
但未按预期合并。显示 array1 值。任何人都可以帮助我吗?
如果两个数组的顺序正确;其中每个项目对应于其关联的成员标识符,您只需使用。
var merge = _.merge(arr1,arr2) ;
以下是短版本:
var merge = _.chain(arr1).zip(arr2).map(function(item){
return _.merge.apply(null,item);
})。value();
或者,如果数组中的数据没有任何特定的顺序,你可以查找相关的成员价值的项目。
var merge = _.map(arr1,function(item){
return _ .merge(item,_. find(arr2,{'member':item.member}));
});
您可以轻松将其转换为mixin。请参阅以下示例:
_.mixin({'mergeByKey':function (arr1,arr2,key){var criteria = {}; criteria [key] = null; return _.map(arr1,function(item){criteria [key] = item [key]; return _.merge(item, _.find(arr2,criteria));});}}); var arr1 = [{member:'ObjectId(57989cbe54cf5d2ce83ff9d6)',bank:'ObjectId(575b052ca6f66a5732749ecc)',country :'ObjectId(575b0523a6f66a5732749ecb)'},{member:'ObjectId(57989cbe54cf5d2ce83ff9d8)',bank:'ObjectId(575b052ca6f66a5732749ecc)',country:'ObjectId(575b0523a6f66a5732749ecb) '}]; var arr2 = [{member:'ObjectId(57989cbe54cf5d2ce83ff9d8)',name:'yyyyyyyyyy',age:26},{member:'ObjectId(57989cbe54cf5d2ce83ff9d6)' ,名称:'xxxxxx', age:25}]; var arr3 = _.mergeByKey(arr1,arr2,'member'); document.body.innerHTML = JSON.stringify(arr3,null,4);
body {font-family:monospace;白空间:pre; }
< script src =https:// cdnjs .cloudflare.com / AJAX /库/ lodash.js / 4.14.0 / lodash.min.js>< /脚本>
I have two array with one common field member. how can I merge theme easily?
For example:
var arr1 = [{
"member" : ObjectId("57989cbe54cf5d2ce83ff9d6"),
"bank" : ObjectId("575b052ca6f66a5732749ecc"),
"country" : ObjectId("575b0523a6f66a5732749ecb")
},
{
"member" : ObjectId("57989cbe54cf5d2ce83ff9d8"),
"bank" : ObjectId("575b052ca6f66a5732749ecc"),
"country" : ObjectId("575b0523a6f66a5732749ecb")
}];
var arr2 = [{
"member" : ObjectId("57989cbe54cf5d2ce83ff9d6"),
"name" : 'xxxxxx',
"age" : 25
},
{
"member" : ObjectId("57989cbe54cf5d2ce83ff9d8"),
"name" : 'yyyyyyyyyy',
"age" : 26
}];
Expected:
var merge = [{
"member" : ObjectId("57989cbe54cf5d2ce83ff9d6"),
"bank" : ObjectId("575b052ca6f66a5732749ecc"),
"country" : ObjectId("575b0523a6f66a5732749ecb"),
"name" : 'xxxxxx',
"age" : 25
},
{
"member" : ObjectId("57989cbe54cf5d2ce83ff9d8"),
"bank" : ObjectId("575b052ca6f66a5732749ecc"),
"country" : ObjectId("575b0523a6f66a5732749ecb"),
"name" : 'yyyyyyyyyy',
"age" : 26
}];
I tried
var merge = _.unionBy(arr1, arr2, 'member');
but not merged as expected. shown array1 value. can any one help me?
If both arrays are in the correct order; where each item corresponds to its associated member identifier then you can simply use.
var merge = _.merge(arr1, arr2);
Which is the short version of:
var merge = _.chain(arr1).zip(arr2).map(function(item) {
return _.merge.apply(null, item);
}).value();
Or, if the data in the arrays is not in any particular order, you can look up the associated item by the member value.
var merge = _.map(arr1, function(item) {
return _.merge(item, _.find(arr2, { 'member' : item.member }));
});
You can easily convert this to a mixin. See the example below:
_.mixin({
'mergeByKey' : function(arr1, arr2, key) {
var criteria = {};
criteria[key] = null;
return _.map(arr1, function(item) {
criteria[key] = item[key];
return _.merge(item, _.find(arr2, criteria));
});
}
});
var arr1 = [{
"member": 'ObjectId("57989cbe54cf5d2ce83ff9d6")',
"bank": 'ObjectId("575b052ca6f66a5732749ecc")',
"country": 'ObjectId("575b0523a6f66a5732749ecb")'
}, {
"member": 'ObjectId("57989cbe54cf5d2ce83ff9d8")',
"bank": 'ObjectId("575b052ca6f66a5732749ecc")',
"country": 'ObjectId("575b0523a6f66a5732749ecb")'
}];
var arr2 = [{
"member": 'ObjectId("57989cbe54cf5d2ce83ff9d8")',
"name": 'yyyyyyyyyy',
"age": 26
}, {
"member": 'ObjectId("57989cbe54cf5d2ce83ff9d6")',
"name": 'xxxxxx',
"age": 25
}];
var arr3 = _.mergeByKey(arr1, arr2, 'member');
document.body.innerHTML = JSON.stringify(arr3, null, 4);
body { font-family: monospace; white-space: pre; }
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.14.0/lodash.min.js"></script>
这篇关于如何使用lodash合并两个对象数组?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!