I have 2 array of objects. I'd like to update/replace the nested object "comments" of collection1 with the matching object of collection2 where collection1.comments._id === collection2.cid in the same order.
collection1: [
0: {
"_id": "6104844e42c23e6d215651cd",
"comments": [
{
"_id": "6143e24273c10e4658852063",
"user": "6138b154e4c6a30dc5661da7",
"comment": "Beautiful Day Outside"
},
{
"_id": "6143e24673c10e4658852065",
"user": "6138b154e4c6a30dc5661da7",
"comment": "Let us go for a picnic"
},
{
"_id": "6145d58519a1d70d89512c9c",
"user": "6144eef7d01acc2a77f4219c",
"comment": "taking time to smell the flowers"
}...
]
},
1: {
"_id": "6104842e42c23e6d215651ca",
"comments": [
{
"_id": "61472dab0224a10e11aa45f8",
"user": "6144eef7d01acc2a77f4219c",
"comment": "Baking cookies for the party"
},
{
"_id": "61472ecb9c2ece100a525c55",
"user": "6138b154e4c6a30dc5661da7",
"comment": "Listening to the waves by the shore"
}......
]
}
]
collection2: [
0: {
"cid": "6143e24273c10e4658852063",
"uid": "6138b154e4c6a30dc5661da7",
"firstName": "mom",
"lastName": "mom",
"comment": "Beautiful Day Outsite"
},
1: {
"cid": "6143e24673c10e4658852065",
"uid": "6138b154e4c6a30dc5661da7",
"firstName": "mom",
"lastName": "mom",
"comment": "Let us go for a picnic"
},
2: {
"cid": "61472dab0224a10e11aa45f8",
"uid": "6144eef7d01acc2a77f4219c",
"firstName": "james",
"lastName": "james",
"comment": "Baking cookies for the party"
},
3: {
"cid": "61472ecb9c2ece100a525c55",
"uid": "6138b154e4c6a30dc5661da7",
"firstName": "james",
"lastName": "james",
"comment": "Listening to the waves by the shore"
},
...
]
I've tried the map function:
collection1.map(obj => collection2.find(o => o.cid === obj.comments._id) || obj);
But I get: TypeError: Cannot read property '_id' of undefined. I'm not sure what to do next. Any assistance will be greatly appreciated.
const collection1 = [
{
"_id": "6104844e42c23e6d215651cd",
"comments": [
{
"_id": "6143e24273c10e4658852063",
"user": "6138b154e4c6a30dc5661da7",
"comment": "Beautiful Day Outside"
},
{
"_id": "6143e24673c10e4658852065",
"user": "6138b154e4c6a30dc5661da7",
"comment": "Let us go for a picnic"
},
{
"_id": "6145d58519a1d70d89512c9c",
"user": "6144eef7d01acc2a77f4219c",
"comment": "taking time to smell the flowers"
}
]
},
{
"_id": "6104842e42c23e6d215651ca",
"comments": [
{
"_id": "61472dab0224a10e11aa45f8",
"user": "6144eef7d01acc2a77f4219c",
"comment": "Baking cookies for the party"
},
{
"_id": "61472ecb9c2ece100a525c55",
"user": "6138b154e4c6a30dc5661da7",
"comment": "Listening to the waves by the shore"
}
]
}
]
const collection2 = [
{
"cid": "6143e24273c10e4658852063",
"uid": "6138b154e4c6a30dc5661da7",
"firstName": "mom",
"lastName": "mom",
"comment": "Beautiful Day Outsite"
},
{
"cid": "6143e24673c10e4658852065",
"uid": "6138b154e4c6a30dc5661da7",
"firstName": "mom",
"lastName": "mom",
"comment": "Let us go for a picnic"
},
{
"cid": "61472dab0224a10e11aa45f8",
"uid": "6144eef7d01acc2a77f4219c",
"firstName": "james",
"lastName": "james",
"comment": "Baking cookies for the party"
},
{
"cid": "61472ecb9c2ece100a525c55",
"uid": "6138b154e4c6a30dc5661da7",
"firstName": "james",
"lastName": "james",
"comment": "Listening to the waves by the shore"
}
]
const updatedCollection1 = collection1.map(col1 => {
const updatedComments = col1.comments.map((col1_comment => {
const matched_comment = collection2.find(el => el.cid === col1_comment._id)
return matched_comment
}))
return {...col1, comments: updatedComments}
})
console.log(updatedCollection1)
Array.prototype.map()
approach can be as follows :
const updatedCollection1 = collection1.map(col1 => {
const updatedComments = col1.comments.map((col1_comment => {
const matched_comment = collection2.find(el => el.cid === col1_comment._id)
return matched_comment
}))
return {...col1, comments: updatedComments}
})
Collected from the Internet
Please contact [email protected] to delete if infringement.
Comments