我试图合并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',
}
]