js 将对象转为对象里包含数组的格式

let menu= {
1: {
icon: "1111",
entVersion: null,
label: "采集管理",
url: "home/home"
},
"1_1": {
icon: "1111",
entVersion: null,
label: "采集管理",
url: "1_1"
},
"1_2": {
icon: "1111",
entVersion: null,
label: "采集管理",
url: "1_2"
},
2: {
icon: "1111",
entVersion: null,
label: "市场管理",
url: "2"
},
"2_1": {
icon: "1111",
entVersion: null,
label: "市场管理",
url: "2_1"
},
"2_2": {
icon: "1111",
entVersion: null,
label: "市场管理",
url: "2_2"
}
}

转为这种类型的数据格式
let menu = {
1: {
icon: "1111",
entVersion: null,
label: "采集管理",
url: "home/home",
children: [
{
icon: "1111",
entVersion: null,
label: "采集管理",
url: "1_1"
},
{
icon: "1111",
entVersion: null,
label: "采集管理",
url: "1_2"
}
]
},
};

除了使用递归 还有更好的方法吗?

这是后端返回的数据?如果是,最好后端处理树关系


const r = new Map()

for (let menuKey in menu) {
    if (menuKey.split("_").length<=1){
        r.set(menuKey+"", menu[menuKey])
    }
}


for (let menuKey in menu) {
    let temp = menuKey.split("_")
    if (temp.length>1 && r.get(temp[0])){
        if (!r.get(temp[0])["children"]){
            r.get(temp[0])["children"] = []
        }
        r.get(temp[0])["children"].push(menu[menuKey])
    }
}

const obj = new Object();
r.forEach((item, key) => {
    obj[key] = item
})


console.log(JSON.stringify(obj));