JSFiddle - React, Tailwind, and code Playground

by coder_jedi

JavaScript

let mappings = {
    "Email": "Email",
    "FirstName": "First Name",
    "Id": "Salesforce.Id",
    "IsActive": "Salesforce.Active",
    "LastName": "Last Name",
    "Name": "Full Name",
    "Title": "JobTitle",
    "User_Team__c": "Team"
}
let data = [{
        "Email": "[email protected]",
        "FirstName": "Aditya",
        "Id": "0054H000007Cp3iQAC",
        "IsActive": true,
        "LastName": "Singh",
        "Name": "Aditya Singh",
        "Title": "Automation Architect",
        "User_Team__c": "Builder Experience"
    },
    {
        "Email": "[email protected]",
        "FirstName": "Mike",
        "Id": "0054H220007Cp3iQAC",
        "IsActive": false,
        "LastName": "Hewitt",
        "Name": "Mike Hewitt",
        "Title": "Documentation Manager",
        "User_Team__c": "Customer Experience"
    }
];

function getKeyByValue(object, value) {
    return Object.keys(object).find(key => object[key] === value);
}
let allFields = Object.values(mappings);
let otherFields = allFields.filter((field) => field.match(/^[^.]*$/));
let nestedFields = allFields.filter((field) => field.match(/\./));
let output = [];
data.map((item, index) => {
    let outputObj = {};
    for (let i = 0; i < otherFields.length; i++) {
        let fieldName = otherFields[i];
        outputObj[fieldName] = item[getKeyByValue(mappings, fieldName)];
    }
    for (let i = 0; i < nestedFields.length; i++) {
        let fieldName = nestedFields[i];
        let parent = fieldName.split(".")[0];
        let child = fieldName.split(".")[1];
        if (!outputObj.hasOwnProperty(parent)) {
            outputObj[parent] = new Object();
            outputObj[parent][child] = item[getKeyByValue(mappings, fieldName)];
        } else
            outputObj[parent][child] = item[getKeyByValue(mappings, fieldName)];
    }
    output.push(outputObj);
})
console.log(output);