javascript - 如果值匹配,则合并两个对象数组
问题描述
如果某些值最终相等,我正在尝试使用合并值创建一个新的对象数组。
举个例子:
const arr1 = [{name: "Sven", firstName: "Alan", age: 24, profile: "Hello, i'm Alan"}, {name: "Mign", firstName: "Alex", age: 44, profile: "Hello, i'm Alex"}];
const arr2 = [{location: "Miami", alias: "ALAN", isAlive: true}, {location: "Los Angeles", alias: "Ethic", isAlive: true}]
在这种情况下,第一个数组的名字与第二个数组的别名匹配,在这种情况下,我想将它们合并到对象中并像这样返回它们:
const newArray = [{name: "Sven", firstName: "Alan", age: 24, profile: "Hello, i'm Alan", isAlive: true, location: "Miami"}]
我尝试了多种解决方案,但最接近的解决方案是:
const newArray = arr1.map((item, i) => {
const mapping = arr2.map(sym => sym.firstName.toLowerCase());
if (mapping.includes(item.alias.toLowerCase())) {
return Object.assign({}, item, arr2[i]);
}
});
在那种情况下,我正在与 object.assign 中的索引合并,所以我的解决方案不正确,一切都会混合在一起。
解决方案
使用数组扩展来实现合并
const arr1 = [{name: "Sven", firstName: "Alan", age: 24, profile: "Hello, i'm Alan"}, {name: "Mign", firstName: "Alex", age: 44, profile: "Hello, i'm Alex"}];
const arr2 = [{location: "Miami", alias: "ALAN", isAlive: true}, {location: "Los Angeles", alias: "Ethic", isAlive: true}]
const mergedData = arr1.map(data=>({
...data,
...arr2.find(newData=>newData.alias.toLowerCase() == data.firstName.toLowerCase())
}))
console.log(mergedData)
推荐阅读
- node.js - 让 Node-gyp 在 Windows 10 上运行
- java - 当元素已经聚焦并等待输入时,如何使用Sendkeys()而不在网页上找到元素
- c# - 当特定子表单处于活动状态时,如何限制访问其他子表单?
- java - 在forEach循环java 8中更改变量的值
- android - 如何在 glsurfaceview 和 cameraview 上修复 3D 对象并从不同角度旋转它?
- java - Android P ,下载不开始使用下载管理器?
- php - Laravel Eloquent ID 作为数组键
- android - 解析存储在 ionic 3 中的常量中的 JSON 字符串
- java - JavaFX - 加载下一个场景时保留工具栏
- c++ - 如何将 C 类型“char *”存储到 C++ 向量中?