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('*')
if (!globalLkupRemoveContactReviewer.find((item2) =>
item2.userid === contactid)) return acc // skip
const parent = acc.find(e => e.objectid === objectid)
const child = { isdelete: "1", contactid, associationid }
if (parent) {
parent.contacts.push(child) // append contact
} else {
acc.push({objectid,contacts: [child]}) // new object
}
return acc
}, [])
console.log(JSON.stringify(data, null, 2))
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('*')
if (!globalLkupRemoveContactReviewer.find((item2) =>
item2.userid === contactid)) return acc // skip
const parent = acc.find(e => e.objectid === objectid)
const child = { isdelete: "1", contactid, associationid }
if (parent) {
parent.contacts.push(child) // append contact
} else {
acc.push({objectid,contacts: [child]}) // new object
}
return acc
}, [])
console.log(JSON.stringify(data, null, 2))
As a result, we do not have unnecessary actions and operations.
UPDATE
Another great example of how to improve performance with reducereduce
. The morbusg's answer has a use of SetSet
, but you can create it in different ways. I suggest creating it in reduce reduce
- we will have one cycleloop
. In the case of new Set(x.map(...))new Set(x.map(...))
we have a map loopmap loop
and an inner loopinner loop
in the Set constructorSet constructor
.