首页 > 解决方案 > 查找两个不同长度的对象数组之间的交集

问题描述

我有两个对象数组,它们共享同名 ( userId) 的属性,但长度不同。这是一个简单的例子:

const arr1= [
    {
        userId: "1", 
        name:"Tommy", 
        hobbies:"fighting"
    }, 
    {
       userId: "16", 
       name:"Kino", 
       hobbies:"skating"
    }
];

const arr2= [
    {
        userId: "1", 
        story:"Big fight"
    }, 
    {
        userId:"16",
        story:"big momentum"
    }
];

我的理想结果是拥有一个数组,它将属性匹配的两个对象userId(以及属性匹配的所有对象)组合在一起,并保留两者的所有属性。

我试过使用concat然后过滤,但无济于事。关于如何实现这一点的任何线索或建议?

标签: javascript

解决方案


这可能是一个可能的解决方案:

const arr1 = [{userId: "1", name:"Tommy", hobbies:"fighting"}, {userId: "16", name:"Kino", hobbies:"skating"}];
const arr2 = [{userId: "1", story:"Big fight"}, {userId:"16", story:"big momentum"}];

const obj = [...arr1, ...arr2].reduce((acc, el) => {
  acc[el.userId] = {...acc[el.userId], ...el};
  
  return acc;
}, {});

const result = Object.values(obj);

console.log(result);


推荐阅读