Last active
September 10, 2020 08:06
-
-
Save robozavri/c7cd75fe17896ee87184a6f7447cea6c to your computer and use it in GitHub Desktop.
javascript get object hierarchy keys #javascript
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| input object : | |
| { | |
| itemOne:{ | |
| subItemOneOne:{}, | |
| subItemOneTwo:{ | |
| SubSubItemOneTwoOne:'ZEZEZEZEZEZEZE', | |
| SubSubItemOneTwoTwo:"kkokokokok" | |
| }, | |
| subItemOneThree:['erererer', 'ffdfdfdf'] | |
| }, | |
| itemTwo:{ | |
| subItemTwoOne:["popopopo","éopopopo"] | |
| } | |
| } | |
| output array of hierarchies : | |
| [ 'itemOne.subItemOneOne.', | |
| 'itemOne.subItemOneTwo.SubSubItemOneTwoOne', | |
| 'itemOne.subItemOneTwo.SubSubItemOneTwoTwo', | |
| 'itemOne.subItemOneThree', | |
| 'itemTwo.subItemTwoOne' ] | |
| /********************* recursice objects *************************************/ | |
| function getStringOutOfHierarchy(obj){ | |
| let finalString = []; | |
| let lastString = []; | |
| let stringHierarachy = recHierarchy(obj, Object.keys(obj))[0]; | |
| finalString.map(elem => { | |
| if(elem.constructor === Array){ | |
| elem.forEach( | |
| (subelem => { | |
| lastString.push(subelem); | |
| }) | |
| ); | |
| } | |
| }); | |
| return lastString; | |
| function recHierarchy(obj, initial) { | |
| if(Object.keys(obj).length != 0){ | |
| return Object.keys(obj).map((elem) => { | |
| let basString = elem; | |
| switch (typeof obj[elem]) { | |
| case 'string':{ | |
| return [`${elem.toString()}`]; | |
| } | |
| default :{ | |
| return [`${elem.toString()}`]; | |
| } | |
| case 'object':{ | |
| if(obj[elem].constructor === Array ) { | |
| return [`${elem.toString()}`]; | |
| } | |
| let returnedValue = recHierarchy(obj[elem]); | |
| let recurMap = (mapElem) => { | |
| if(mapElem.constructor === Array) { | |
| return mapElem.map( | |
| (mapsubelem) => { | |
| if(mapsubelem.constructor === Array) { | |
| return recurMap(mapsubelem); | |
| } | |
| return `${basString}.${mapsubelem.toString()}`; | |
| } | |
| ); | |
| } | |
| return `${basString}.${mapElem.toString()}`; | |
| } | |
| let value = returnedValue.map( | |
| (elem) => { | |
| if(elem.constructor === Array) { | |
| return elem.map( | |
| (subelem) => { | |
| if(elem.constructor === Array) { | |
| return recurMap(subelem); | |
| } | |
| return `${basString}.${subelem.toString()}`; | |
| } | |
| ); | |
| } | |
| return `${basString}.${elem.toString()}`; | |
| } | |
| ); | |
| (initial && initial.indexOf(elem) !== -1) ? finalString = finalString.concat(value) : null; | |
| return value; | |
| } | |
| } | |
| }); | |
| }else{ | |
| return ['']; | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment