Skip to content

Instantly share code, notes, and snippets.

@robozavri
Last active September 10, 2020 08:06
Show Gist options
  • Select an option

  • Save robozavri/c7cd75fe17896ee87184a6f7447cea6c to your computer and use it in GitHub Desktop.

Select an option

Save robozavri/c7cd75fe17896ee87184a6f7447cea6c to your computer and use it in GitHub Desktop.
javascript get object hierarchy keys #javascript
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