JSFiddle - React, Tailwind, and code Playground
by brigand
JavaScript
const fulltree = {
shark: {
TEST: {
test: {
meta: {
status: 'regular',
},
'multiple-run': {
meta: {
creator_user: 'gold',
},
},
},
},
},
octopus: {
J212: {
'F291-21': {
meta: {
status: 'regular',
},
'multiple-run': {
meta: {
creator_user: 'gold',
},
},
},
},
},
};
const isObject = (value) => value != null && typeof value === 'object';
const traversewrap = (rootObject) => {
const result = [];
const inner = (object, wrap) => {
const keys = isObject(object) ? Object.keys(object) : [];
// how to update meta here and omit it from path?
if (keys.length === 0) {
result.push(wrap);
} else {
for (const key of keys) {
inner(object[key], {
path: wrap.path.concat([key]),
meta: object.meta ? {
...wrap.meta,
...object.meta,
} : wrap.meta,
});
}
}
};
inner(rootObject, {path:[], meta:{}});
return result;
};
//console.log(traverse(fulltree));
console.log(traversewrap(fulltree));