JSFiddle - React, Tailwind, and code Playground

by Steven Senkus

HTML

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.15/lodash.js"></script>

JavaScript

function generateFormHierarchy(formList, parentForm) {
    return formList.reduce((accum, item) => {
        const itemAsArr = item.slice(parentForm.id.strAddr.length + 1).split(':');
        console.log(itemAsArr);
        const hierarchy = itemAsArr.reduceRight((value, key, index, arr) => {
            // TODO; explain this
            const hierarchyKey = parentForm.id.strAddr + ':' + arr.slice(0, index + 1).join(':');

            return {
                [hierarchyKey]: value
            };
        }, null);
        return _.merge(accum, hierarchy);
    }, {});
}

let formList = [
    "S2018US1040PER$FSCHC[1]:F8829[1]:F8829W2",
    "S2018US1040PER$FSCHC[1]:F8829[1]:F8829W2:ASDF",
    "S2018US1040PER$FSCHC[1]:F8829[1]:XYZQ123"
];

let parentForm = {
    id: {
        strAddr: 'S2018US1040PER$FSCHC[1]:F8829[1]'
    }
};

let output = JSON.stringify(generateFormHierarchy(formList, parentForm), null, 4);


console.log(output);