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"]
//    }
//}