Reputation: 54016
I want to merge 2 arrays to create new which have update value based on key but unable to achieve. I am looking for a simpler solution with the es6/es7 approach.
let selectedID = [
{
"id": 7,
"selected": true
},
{
"id": 1,
"selected": true
}
];
let baseID = [
{
"id": 7,
"selected": false
},
{
"id": 12,
"selected": false
},
{
"id": 13,
"selected": false
},
{
"id": 1,
"selected": false
},
{
"id": 9,
"selected": false
},
{
"id": 10,
"selected": false
}
];
const op = baseID.map( b => {
return selectedID.map( f => {
if(f.id === s.id) {
return f;
} else {
return b;
}
});
});
console.log(op);
but it returns an array of items and each item is array of 2 objects.
[[
{id: 7, selected: true}
{id: 7, selected: false}
,[],...]
expected output:
[{
"id": 7,
"selected": true
},
{
"id": 12,
"selected": false
},
{
"id": 13,
"selected": false
},
{
"id": 1,
"selected": true
},
{
"id": 9,
"selected": false
},
{
"id": 10,
"selected": false
}
]
Upvotes: 1
Views: 35
Reputation: 10356
You can use find
with map
to lookup selectedID
array:
let selectedID = [
{
id: 7,
selected: true
},
{
id: 1,
selected: true
}
];
let baseID = [
{
id: 7,
selected: false
},
{
id: 12,
selected: false
},
{
id: 13,
selected: false
},
{
id: 1,
selected: false
},
{
id: 9,
selected: false
},
{
id: 10,
selected: false
}
];
const op = baseID.map(
item => selectedID.find(selectedItem => item.id === selectedItem.id) || item
);
console.log(op);
Upvotes: 1