JSFiddle - React, Tailwind, and code Playground
JavaScript
function eachRecursive(obj) {
var parents = arguments[1] || [];
let result = arguments[2] || {};
for (var k in obj) {
if (obj.hasOwnProperty(k) && typeof obj[k] == "object" && obj[k] !== null ) {
result[k] = {name:obj[k].name, parents:parents.slice()};
parents.push(k);
eachRecursive(obj[k].children, parents, result);
parents.pop();
} else {
result[k] = {name:obj[k].name, parents:parents.slice()};
}
}
return result;
}
var o = {
"1": {
name: "hi 1",
children: {
"1.1": {
name: "hi 1.1",
children: {
"1.1.1": {
name: "hi 1.1.1",
children: {}
}
}
},
"1.2": {
name: "hi 1.2",
children: {}
}
}
},
"2": {
name: "hi 2",
children: {
"2.1": {
name: "hi 2.1",
children: {}
}
}
}
}
var codes = eachRecursive(o);
console.log(codes);
// What I wish to have.
//{
// "1": {
// "name":"hi 1",
// "parents":[]
// },
// "2": {
// "name": "hi 2",
// "parents": []
// },
// "1.1": {
// "name": "hi 1.1",
// "parents": ["1"]
// },
// "1.1.1": {
// "name": "hi 1.1.1",
// "parents": ["1", "1.1"]
// },
// "1.2": {
// "name": "hi 1.2",
// "parents": ["1"]
// },
// "2.1": {
// "name": "hi 2.1",
// "parents": ["2"]
// }
//}