如果某些值最终相等,我正在尝试使用合并值创建一个新的对象数组。
举个例子:
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}]
Run Code Online (Sandbox Code Playgroud)
在这种情况下,第一个数组的 firstName 与第二个数组的别名匹配,在这种情况下,我想将它们合并为对象并像这样返回它们:
const newArray = [{name: "Sven", firstName: "Alan", age: 24, profile: "Hello, i'm Alan", isAlive: true, location: "Miami"}]
Run Code Online (Sandbox Code Playgroud)
我尝试了多种解决方案,但最接近的解决方案是:
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]);
}
});
Run Code Online (Sandbox Code Playgroud)
在这种情况下,我将与 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)Run Code Online (Sandbox Code Playgroud)