Javascript 嵌套 object 递归

Javascript nested object recursive

所以,我做了研究,但到目前为止我找不到任何好的解决方案...

所以我有一个 object 方法,所以我尝试了一个递归函数,但它根本不起作用 (我为什么在这里)

这个函数通过一层然后停止她发现 id 3 和 id 11 都有 1 个孩子,而我希望它更深入

我希望它不是重复的post

提前谢谢你

#函数

const haveChild = (obj, parent_id=0) =>{
        for (const [key,value] of Object.entries(obj)){
            if (value && typeof value === "object"){
                if (value['childrens']){
                    for (const [k,v] of Object.entries(value.childrens)){
                        haveChild(v,v.parent_id)
                        console.log('-----',v.name,'parent id= ',v.parent_id)

                    }
                }else{

                }
            }

        }

#数据来自API


{ 
    "2": {
      "id": "2",
      "parent_id": "0",
      "name": "name1"
    },
    "3": {
      "id": "3",
      "parent_id": "0",
      "name": "name2",
      "childrens": {
        "9": {
          "id": "9",
          "parent_id": "3",
          "name": "name3"
        }
      }
    },
    "11":{
      "id": "11",
      "parent_id": "0",
      "name": "name4",
      "childrens": {
        "16": {
          "id": "16",
          "parent_id": "11",
          "name": "name5",
          "childrens": {
            "21": {
              "id": "21",
              "parent_id": "16",
              "name": "name6",
              "childrens": {
                "23": {
                  "id": "23",
                  "parent_id": "21",
                  "name": "name7"
                }
              }
            }
          }
        }
      }
    } 
}

问题是第一次调用函数时,在for循环中,key是每个对象的key,value是对应的值

但是从第二次开始key是属性名,value是属性值 所以你必须以这种方式创建另一个对象:

{[k]: v}

我还将 console.log 移到内部 for 循环之外

const haveChild = (obj, parent_id=0) =>{
        for (const [key,value] of Object.entries(obj)){
            if (value && typeof value === "object"){
                if (value.childrens){
                    for (const [k,v] of Object.entries(value.childrens)){
                        haveChild({[k]: v},v.parent_id)
                    }
                }
                console.log('-----',value.name,'parent id= ',value.parent_id);
            }
       }
}