Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Finding element by id in array from other array

I've 2 arrays:

address - array of object with id

pickup - array of object with id

And I need connect these arrays into 1 by id.

example:

address = [
  {id: "123", name: "any city street"},
  {id: "124", name: "any city street"},
  {id: "125", name: "any city street"},
  {id: "126", name: "any city street"}
];

pickups = [
  {id: "123", time: "10:20"},
  {id: "124", time: "11:30"},
  {id: "125", time: "12:00"},
  {id: "126", time: "12:20"}
];

And I need connect it by id with result like:

{id: "124", name: "name smth", time: "11:30"}

I mean about map this 2 arrays into one

like image 623
programmer Avatar asked Apr 07 '26 16:04

programmer


2 Answers

address = [
  {id: "123", name: "any city street"},
  {id: "124", name: "any city street"},
  {id: "125", name: "any city street"},
  {id: "126", name: "any city street"}
];

pickups = [
  {id: "123", time: "10:20"},
  {id: "124", time: "11:30"},
  {id: "125", time: "12:00"},
  {id: "126", time: "12:20"}
];

const result = pickups.map(pickup => {
    let match = address.find(addr => addr.id == pickup.id);
    return {
         id : pickup.id, 
         time: pickup.time,
         name : match.name,
    }
})
console.log(result);

Or if you really really like short code:

pickups.map(el => ({ ...el, ...address.find(addr => addr.id == el.id)}))

Be aware that this works fine only if there is always a match between pickups and address

like image 120
Alberto Sinigaglia Avatar answered Apr 09 '26 07:04

Alberto Sinigaglia


You could do:

let address = [
  {id: "123", name: "any city street"},
  {id: "124", name: "any city street"},
  {id: "125", name: "any city street"},
  {id: "126", name: "any city street"}
];

let pickups = [
  {id: "123", time: "10:20"},
  {id: "124", time: "11:30"},
  {id: "125", time: "12:00"},
  {id: "126", time: "12:20"}
];

let obj = {};

for (let i=0; i<address.length; i++) {
  obj[address[i].id] = obj[address[i].id] || {id: address[i].id};
  obj[address[i].id].name = address[i].name;
}

for (let i=0; i<pickups.length; i++) {
  obj[pickups[i].id] = obj[pickups[i].id] || {id: pickups[i].id};
  obj[pickups[i].id].time = pickups[i].time;
}

let result = Object.keys(obj).map(id => obj[id]);
console.log(result);
like image 39
Rahul Bhobe Avatar answered Apr 09 '26 06:04

Rahul Bhobe