const graphData = {
"engagementAreas": [{
"id": "1",
"engagementTypes": [{
"name": "forestry",
"engagements": []
},
{
"name": "houses",
"engagements": [{
"name": "engagement1",
"members": [{
"position": {
"id": "a16b0000004AxeBAAS",
"positionTitle": "Manager"
}
}]
}]
}
]
}]
};
const IndividualData = [{
"account": {
"id": "001b000003WnPy1AAF",
"fullName": "Adnan A. Khan"
},
"positions": [{
"id": "a16b0000004AxeBAAS",
"organizationId": "001b0000005gxmlAAA",
"organizationName": "a",
"positionTitle": "Senior Manager, Energy",
"positionLevel": "5-Middle Management & Advisers",
"isPrimary": true,
"startDate": "2016-10-07",
"endDate": null
}]
}, {
"account": {
"id": "0010X000048DDMsQAO",
"fullName": "Christine Leong"
},
"positions": [{
"id": "a160X000004nKfhQAE",
"organizationId": "001b0000005gxmlAAA",
"organizationName": "a",
"positionTitle": "Managing Director",
"positionLevel": "4-Head of Business Unit/Head of Region",
"isPrimary": true,
"startDate": "2018-03-05",
"endDate": null
}]
}, {
"account": {
"id": "001b000000Gs91HAAR",
"fullName": "Cora Ansorg"
},
"positions": [{
"id": "a16b00000022KmhAAE",
"organizationId": "001b0000006291oAAA",
"organizationName": "a",
"positionTitle": "Strategy Consultant - Financial Services",
"positionLevel": "5-Middle Management & Advisers",
"isPrimary": false,
"startDate": "2012-01-01",
"endDate": "2015-04-30"
}]
}]
const allPositions = _.flatten(IndividualData.map(i => i.positions))
const updateMembers = members => members.map(member => {
const position = allPositions.find(pos => pos.id === member.position.id) || {
positionTitle: 'untitiled'
};
return { ...member,
position: { ...member.position,
positionTitle: position.positionTitle
}
};
});
const updateEngagements = engagements => (
engagements.map(engagement => ({
...engagement,
members: updateMembers(engagement.members)
}))
);
const updateEngagementTypes = (engagementAreas) => ({
...engagementAreas,
engagementTypes: engagementAreas
.engagementTypes.map(type => ({
...type,
engagements: updateEngagements(type.engagements)
}))
});
const updatedEngagementAreas = graphData.engagementAreas.map(updateEngagementTypes);
console.log('UpdatedEngagementAreas mapped based on position id', updatedEngagementAreas)
<script src="https://cdn.jsdelivr.net/npm/lodash@4.17.10/lodash.min.js"></script>