JS -基于属性合并2个数组



我试图合并2个对象数组,其中产生的数组应该只有数组1 (selectedNames)中存在的对象,但有一个属性来自数组2 (nameDetails)的相应对象。有一个匹配(唯一)属性来匹配它们:

const selectedNames = [
{
id: '11'
name: 'joe',
},
{
id: '22',
name: 'bill',
},
];
const nameDetails = [
{
nameId: '11',
salary: '23422',
location: 'New Jersey',
},
{
nameId: '33',
salary: '23424',
location: 'New York',
},
{
nameId: '22',
salary: '99999',
location: 'Boston',
},
{ nameId: '44',
salary: '323232',
location: 'Chicago',
},
];

匹配属性是selectedNames。id === nameDetails.nameId。selectedNames中的所有条目肯定会出现在nameDetails中(但不是相反)。生成的数组应该是这样的:

[
{
id: '11',
name: 'joe',
salary: '23422',
},
{
id: '22',
name: 'bill',
salary: '99999'
}
]

我有点困惑。我知道它可能包含。includes()和filter()以及…合并?我不知道该怎么处理。

另一种可能更容易的方法是,过滤nameDetails数组,只包含nameId存在于selectedNames(作为id)中的对象。

我对你的示例结果有点困惑。例如,id: '11111'从何而来?

你在找这样的东西吗?

const selectedNames = [
{
id: '11',
name: 'joe',
},
{
id: '22',
name: 'bill',
},
];
const nameDetails = [
{
nameId: '11',
salary: '23422',
location: 'New Jersey',
},
{
nameId: '33',
salary: '23424',
location: 'New York',
},
{
nameId: '22',
salary: '99999',
location: 'Boston',
},
{ nameId: '44',
salary: '323232',
location: 'Chicago',
},
];
const merged = selectedNames.map(n => {
n.salary = nameDetails.filter(d => n.id === d.nameId)[0].salary;
return n;
});
console.log(merged)

注意:这将通过添加nameDetails中相应条目的salary来改变原始的selectedNames

也许这符合您的需求:

selectedNames.map(({ id, name }) => {
let salary = nameDetails.find((nameItem) => nameItem.nameId === id).salary;
return { id, name, salary };
})

将导致:

[
{
id: '11',
name: 'joe',
salary: '23422',
},
{
id: '22',
name: 'bill',
salary: '99999',
}
]

最新更新