javascript - 合并和连接两个对象数组 - JS
问题描述
我有两个对象数组,我想根据不同的属性合并它们,如果列表中不存在某些东西,我也想合并它们。
这就是我所拥有的:
const data1 = [{
name: 'A',
id: 1
}, {
name: 'B',
id: 2
}]
const data2 = [{
city: 'X',
rowID: 1
}, {
city: 'Y',
rowID: 2
}, {
city: 'Z',
rowID: 3
}]
const result = _.map(data1, function(p) {
return _.merge(
p,
_.find(data2, {
rowID: p.id
})
)
})
console.log(result)
//Expected Result
/**[
{
"name": "A",
"id": 1,
"city": "X",
"rowID": 1
},
{
"name": "B",
"id": 2,
"city": "Y",
"rowID": 2
},
{
"name": "",
"id": "",
"city": 'Z',
"rowID": 3
}
]*/
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.20/lodash.min.js"></script>
请指教。
解决方案
您可以使用 a 收集合并的对象Map
并获取值。
const
merge = data => {
const
pattern = {},
map = new Map;
data.forEach(([objects, key]) => {
Object.keys(objects[0]).forEach(k => pattern[k] = '');
objects.forEach(o => map.set(o[key], { ...map.get(o[key]), ...o }));
});
return Array.from(map.values(), o => ({ ...pattern, ...o }));
},
data1 = [{ name: 'A', id: 1 }, { name: 'B', id: 2 }],
data2 = [{ city: 'X', rowID: 1 }, { city: 'Y', rowID: 2 }, { city: 'Z', rowID: 3 }],
result = merge([[data1, 'id'], [data2, 'rwoID']]);
console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }
推荐阅读
- kubernetes - 在 IBM Cloud Kubernetes Service 中使用 IBM App ID 时未触发认证过程
- r - 如何选择具有相同前缀的多个变量中的 1 个?
- c# - 有什么方法可以找到通过.Net 应用程序中的反射访问哪些 DLL?
- docker - 如何在 GitLab CI 的 Docker 中构建和测试应用程序?
- python - 给定一个 N 侧方阵,有没有办法在不使用循环或 if 条件的情况下找到单元格的环值?
- amazon-web-services - Amplify 中没有经过身份验证的用户的当前用户
- python - 如何在python中的字典元素列表中访问字典?
- c# - 机器人框架 V4 网络聊天中的每个用户的 AD 身份验证令牌并不相同
- svm - “带”边缘上的数据点,围绕使带外所有数据点冗余的分隔符,称为什么?
- c++ - Boost 能做什么现代 C++ 做不到的?