как создать новый массив на основе двух разных массивов с одинаковым идентификатором в Typescript/JavaScript?
let array1 = [
{
invoiceId: 1,
name:'Ajay',
contact:'0001'
},
{
invoiceId: 2,
name:'vijay',
contact:'1234'
},
{
invoiceId: 3,
name:'Amit',
contact:'4581'
},
];
let array2 = [
{
invoiceId: 1,
age:24,
email:'[email protected]'
},
{
invoiceId: 2,
age:23,
email:'[email protected]'
},
];
в обоих массивах общим полем является идентификатор счета-фактуры, основанный на идентификаторе счета-фактуры, необходимо создать новый массив, как показано в примере ниже.
let expectedresult = [
{
name:'Ajay',
age:24
},
{
name:'vijay',
age:23
},
{
name:'Amit',
age:null
},
];
как справиться с этим в Typescript/JavaScript. есть ли решение на основе Lodash?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы должны пройти через array1 и найти совпадение в array2. Затем верните имя и возраст, если они найдены.
let expectedresult = array1.map(el => {
let match = array2.find(obj => obj.invoiceId === el.invoiceId)
return {
name: el.name,
age: match ? match.age : null
}
})
Я думаю, что это может быть одним из решений.
let array1 = [
{
invoiceId: 1,
name:'Ajay',
contact:'0001'
},
{
invoiceId: 2,
name:'vijay',
contact:'1234'
},
{
invoiceId: 3,
name:'Amit',
contact:'4581'
},
];
let array2 = [
{
invoiceId: 1,
age:24,
email:'[email protected]'
},
{
invoiceId: 2,
age:23,
email:'[email protected]'
},
];
console.info(array1.map(item=>({name:item.name, age: array2.filter(filteritem=>filteritem.invoiceId===item.invoiceId)[0]?.age || null})))Согласно вопросу, вы должны закоротить возраст, чтобы он был null, а не undefined. Используйте filteritem.invoiceId===item.invoiceId)[0]?.age || null
Да, ты прав.
Вы можете создать карту объектов из массива2 на основе invoiceId в качестве ключа, а затем легко получить к ней доступ при переборе массива1.
const map2 = Object.fromEntries(array2.map(item=>[item['invoiceId'], item.age]))
const expectedArray = array1.map(item=> {
return {
name: item.name,
age: map2[item.invoiceId] ? map2[item.invoiceId] : null
}
})
Пожалуйста, удалите тег
reactjs, если вопрос не имеет ничего общего с РеактJS.