首页 > 解决方案 > 如果值匹配,则合并两个对象数组

问题描述

如果某些值最终相等,我正在尝试使用合并值创建一个新的对象数组。

举个例子:

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 中的索引合并,所以我的解决方案不正确,一切都会混合在一起。

标签: javascriptarrays

解决方案


使用数组扩展来实现合并

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)


推荐阅读