I have a small exercise, to merge three arrays into one array by matching ID's, I'd like to add the likes and comments array into the posts array how would I go about this?
const posts =
[ { _id: 1
, message: 'this is post one'
, likes: [ { id: 1111 } , { id: 2222 } ]
, comments: [ { id: 3333 } , { id: 4444 } ]
}
]
const comments =
[ { id: 3333, message: 'this is comment 1' }
, { id: 4444, message: 'this is comment 2' }
]
const likes =
[ { id: 1111, user: 'Peter' }
, { id: 2222, user: 'John' }
]
expected output:
newArray =
[ { _id: 1
, message: 'this is post one'
, likes:
[ { id: 1111, user: 'Peter'}
, { id: 2222, user: 'John'} ]
, comments:
[ { id: 3333, message: 'this is comment 1'}
, { id: 4444, message: 'this is comment 2'}
] } ]
Here is a similar approach I've used when working with two arrays:
const
arr1 = [{ groupId: "Category", options: [{ name: "cookies", id: 1111 }, { name: "tv", id: 2222 }] }, { groupId: "Brand", options: [{ name: "random", id: 3333 }] }, { groupId: "Price", options: [{ name: "random2", id: 4444 }] }],
arr2 = [{ id: 1111, url: "/test", other: 'other-prop' }, { id: 2222, url: "/test1" }, { id: 3333, url: "/test2" }],
mergeById = (arr1, arr2) =>
arr1.map(({ options, ...rest }) => (
{
...rest,
options: options.map(option => (
{
...option,
...arr2.find(_option => _option.id === option.id)
}
))
}
));
const merged = mergeById(arr1, arr2);
console.log(JSON.stringify(merged, null, 2));