Javascript 如何找到特定对象的祖先

Javascript 如何找到特定对象的祖先,javascript,arrays,parent-child,Javascript,Arrays,Parent Child,“我有这个东西 我需要创建一个函数getHierarchy,该函数使用一个选项ID作为输入,在 列出并返回其所有父项的ID 例如,getHierarchy(“a.1.3”)应返回以下结果[“a”、“a.1”、“a.1.3”] getHierarchy(“c.3.3”)应返回以下结果[“c”、“c.3”、“c.3.3”]”假设id是唯一的 let obj = { "options": [ { "id": "a",

“我有这个东西 我需要创建一个函数getHierarchy,该函数使用一个选项ID作为输入,在 列出并返回其所有父项的ID

例如,getHierarchy(“a.1.3”)应返回以下结果[“a”、“a.1”、“a.1.3”] getHierarchy(“c.3.3”)应返回以下结果[“c”、“c.3”、“c.3.3”]”

假设id是唯一的

let obj = {
  "options": [
    {
      "id": "a",
      "name": "a",
      "options": [
        {
          "id": "a.1",
          "options": [
            {
              "id": "a.1.1",
              "name": "a.1.1"
            },
            {
              "id": "a.1.2",
              "name": "a.1.2"
            },
            {
              "id": "a.1.3",
              "name": "a.1.3"
            }
          ]   
        },
        {
          "id": "a.2",
          "name": "a.2",
          "options": [
            {
              "id": "a.2.1",
              "name": "a.2.1"
            },
            {
              "id": "a.2.2",
              "name": "a.2.2"
            },
            {
              "id": "a.2.3",
              "name": "a.2.3"
            }
          ]
        },
        {
          "id": "a.3",
          "name": "a.3",
          "options": [
            {
              "id": "a.3.1",
              "name": "a.3.1"
            },
            {
              "id": "a.3.2",
              "name": "a.3.1"
            },
            {
              "id": "a.3.3",
              "name": "a.3.1"
            }
          ]
        }
      ]
    },
    {
      "name": "b",
      "id": "b",
      "options": [
        {
          "id": "b.1",
          "name": "b.1",
          "options": [
            {
              "id": "b.1.1",
              "name": "b.1.1"
            },
            {
              "id": "b.1.2",
              "name": "b.1.2"
            },
            {
              "id": "b.1.3",
              "name": "b.1.3"
            }
          ]
        },
        {
          "id": "b.2",
          "name": "b.2",
          "options": [
            {
              "id": "b.2.1",
              "name": "b.2.1"
            },
            {
              "id": "b.2.2",
              "name": "b.2.2"
            },
            {
              "id": "b.2.3",
              "name": "b.2.3"
            }
          ]
        },
        {
          "id": "b.3",
          "name": "b.3.1",
          "options": [
            {
              "id": "b.3.1",
              "name": "b.3.1"
            },
            {
              "id": "b.3.2",
              "name": "b.3.2"
            },
            {
              "id": "b.3.3",
              "name": "b.3.3"
            }
          ]
        }
      ]
    },
    {
      "id": "c",
      "name": "c",
      "options": [
        {
          "id": "c.1",
          "name": "c.1",
          "options": [
            {
              "id": "c.1.1",
              "name": "c.1.1"
            },
            {
              "id": "c.1.2",
              "name": "c.1.2"
            },
            {
              "id": "c.1.3",
              "name": "c.1.3"
            }
          ]
        },
        {
          "id": "c.2",
          "name": "c.2",
          "options": [
            {
              "id": "c.2.1",
              "name": "c.2.1"
            },
            {
              "id": "c.2.2",
              "name": "c.2.2"
            },
            {
              "id": "c.2.3",
              "name": "c.2.3"
            }
          ]
        },
        {
          "id": "c.3",
          "name": "c.3",
          "options": [
            {
              "id": "c.3.1",
              "name": "c.3.1"
            },
            {
              "id": "c.3.2",
              "name": "c.3.2"
            },
            {
              "id": "c.3.3",
              "name": "c.3.3"
            }
          ]
        }
      ]
    }
  ]
}

这里有一个递归解决方案,我希望这对您有所帮助

让obj={
“选择”:[
{
“id”:“a”,
“姓名”:“a”,
“选择”:[
{
“id”:“a.1”,
“选择”:[
{
“id”:“a.1.1”,
“名称”:“a.1.1”
},
{
“id”:“a.1.2”,
“名称”:“a.1.2”
},
{
“id”:“a.1.3”,
“名称”:“a.1.3”
}
]   
},
{
“id”:“a.2”,
“名称”:“a.2”,
“选择”:[
{
“id”:“a.2.1”,
“名称”:“a.2.1”
},
{
“id”:“a.2.2”,
“名称”:“a.2.2”
},
{
“id”:“a.2.3”,
“名称”:“a.2.3”
}
]
},
{
“id”:“a.3”,
“名称”:“a.3”,
“选择”:[
{
“id”:“a.3.1”,
“名称”:“a.3.1”
},
{
“id”:“a.3.2”,
“名称”:“a.3.1”
},
{
“id”:“a.3.3”,
“名称”:“a.3.1”
}
]
}
]
},
{
“名称”:“b”,
“id”:“b”,
“选择”:[
{
“id”:“b.1”,
“名称”:“b.1”,
“选择”:[
{
“id”:“b.1.1”,
“名称”:“b.1.1”
},
{
“id”:“b.1.2”,
“名称”:“b.1.2”
},
{
“id”:“b.1.3”,
“名称”:“b.1.3”
}
]
},
{
“id”:“b.2”,
“名称”:“b.2”,
“选择”:[
{
“id”:“b.2.1”,
“名称”:“b.2.1”
},
{
“id”:“b.2.2”,
“名称”:“b.2.2”
},
{
“id”:“b.2.3”,
“名称”:“b.2.3”
}
]
},
{
“id”:“b.3”,
“名称”:“b.3.1”,
“选择”:[
{
“id”:“b.3.1”,
“名称”:“b.3.1”
},
{
“id”:“b.3.2”,
“名称”:“b.3.2”
},
{
“id”:“b.3.3”,
“名称”:“b.3.3”
}
]
}
]
},
{
“id”:“c”,
“姓名”:“c”,
“选择”:[
{
“id”:“c.1”,
“名称”:“c.1”,
“选择”:[
{
“id”:“c.1.1”,
“名称”:“c.1.1”
},
{
“id”:“c.1.2”,
“名称”:“c.1.2”
},
{
“id”:“c.1.3”,
“名称”:“c.1.3”
}
]
},
{
“id”:“c.2”,
“名称”:“c.2”,
“选择”:[
{
“id”:“c.2.1”,
“名称”:“c.2.1”
},
{
“id”:“c.2.2”,
“名称”:“c.2.2”
},
{
“id”:“c.2.3”,
“名称”:“c.2.3”
}
]
},
{
“id”:“c.3”,
“名称”:“c.3”,
“选择”:[
{
“id”:“c.3.1”,
“名称”:“c.3.1”
},
{
“id”:“c.3.2”,
“名称”:“c.3.2”
},
{
“id”:“c.3.3”,
“名称”:“c.3.3”
}
]
}
]
}
]
}
函数getHierarchy(选项、路径、索引=1、结果=[])){
if(!opts)返回结果;
设objPaths=path.split(“.”);
让_path=objPaths.slice(0,索引).join(“.”);
让option=opts.find(({id})=>id===u路径);
if(!option)返回结果;
设{options,id}=option;
返回getHierarchy(选项、路径、++索引、[…结果、id]);
}
让结果=getHierarchy(对象选项,“a.1.3”);
控制台日志(结果)
function getHierarchy(object, id, prev) {
    if (!object.options) return;
    for (const child of object.options) {
        if(child.id === id) {
            return [...prev, object.id, child.id];
        }
        result = getHierarchy(child, id, [...prev, object.id]);
       if (result) return result;
    }
}
getHierarchy(obj, "a.1.3", []);