gpt4 book ai didi

javascript - 如何使用 lodash 按 ID 合并两个对象数组?

转载 作者:行者123 更新时间:2023-12-02 23:02:41 26 4
gpt4 key购买 nike

我有两个数组,每个数组都有一个公共(public)字段成员。如何轻松合并主题?

例如:

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
}];

预期:

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
}];

我尝试过

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")',
"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>

关于javascript - 如何使用 lodash 按 ID 合并两个对象数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38612972/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com