Reputation: 770
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
Upvotes: 3
Views: 2215
Reputation: 12929
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
Upvotes: 5
Reputation: 534
Using Reduce:
const 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"}
];
const pickups = [
{id: "123", time: "10:20"},
{id: "124", time: "11:30"},
{id: "125", time: "12:00"},
{id: "126", time: "12:20"}
];
const resultArray = [];
address.reduce((resultArr, currentAddress) => {
let currentAddressPickup = pickups.find(pickup => pickup.id == currentAddress.id);
let mergedCurrectAddressAndPickup = {
...currentAddress,
...currentAddressPickup
}
resultArr.push(mergedCurrectAddressAndPickup)
return resultArr;
}, resultArray)
console.log(resultArray)
Upvotes: 0
Reputation: 4519
Using Map
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"} ];
map= new Map()
address.map(o=>map.set(o.id,o))
var res= pickups.map(o=>{
var v=map.get(o.id);
if(v) v.time=o.time
return v})
console.log(res)
Upvotes: 0
Reputation: 2720
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 mergedArr = address.map((item, i) => {
if (item.id === pickups[i].id) {
return Object.assign({}, item, pickups[i]);
}
});
console.log(mergedArr);
Upvotes: 0
Reputation: 14891
Below snippet could help you
const addresses = [
{ id: '123', name: 'any city street' },
{ id: '126', name: 'any city street' },
{ id: '124', name: 'any city street' },
{ id: '125', name: 'any city street' },
{ id: '127', name: 'any city street' }
]
const pickups = [
{ id: '126', time: '12:20' },
{ id: '123', time: '10:20' },
{ id: '125', time: '12:00' },
{ id: '124', time: '11:30' }
]
const notUndefined = element => !!element
const res = addresses
.map(address => {
const pickup = pickups.find(pickup => pickup.id === address.id)
if (pickup) {
return { ...address, ...pickup }
}
})
.filter(notUndefined)
console.log(res)
Upvotes: 0
Reputation: 4451
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);
Upvotes: 1
Reputation: 1175
const 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"}
];
const pickups = [
{id: "123", time: "10:20"},
{id: "124", time: "11:30"},
{id: "125", time: "12:00"},
{id: "126", time: "12:20"}
];
const result = address.map((rec, index) => {
return { ...rec, ...pickups[index]}
})
console.log(result)
Upvotes: 0