If I understand everything correctly, then this can be done easier. The code can be formatted in different ways. But the main thing is that there is less action. So:
- we split the data into parts
- then through reduce we form a common array of objects
- parse data for object (including
objectid
) - check
globalLkupRemoveContactReviewer
if we should add something - to save space, we form a
child
object once - if we have an object with this
objectid
- update it otherwise create it
const globalLkupRemoveContactReviewer = [
{ objectid: 555, userid: '1', associationid: '1948874' },
{ objectid: 555, userid: '2', associationid: '1950833' },
];
const myStr = '111*1*1968397,222*1*1968398,222*2*1968399,333*2*1968401,333*4*1968402,333*1*19684034';
const data = myStr.split(',')
.reduce((acc, e) => {
const [objectid, contactid, associationid] = e.split('*')
const parent = acc.find(e => e.objectid === objectid)
const child = { isdelete: "1", contactid, associationid }
if (globalLkupRemoveContactReviewer.find((item2) =>
item2.userid === contactid)) return acc
if (parent) parent.contacts.push(child)
else acc.push({objectid,contacts: [child]})
return acc
}, [])
console.log(JSON.stringify(data, null, 2))
As a result, we do not have unnecessary actions and operations.