Javascript 反向遍历层次结构

Javascript 反向遍历层次结构,javascript,arrays,typescript,ecmascript-5,Javascript,Arrays,Typescript,Ecmascript 5,我有一个包含父ID的对象层次结构。在解析json对象时,我将parentId添加到子对象中,如下所示 public static fromJson(json: any): Ancestry | Ancestry[] { if (Array.isArray(json)) { return json.map(Ancestry.fromJson) as Ancestry[]; } const result = new Ancestry(); const

我有一个包含父ID的对象层次结构。在解析json对象时,我将parentId添加到子对象中,如下所示

public static fromJson(json: any): Ancestry | Ancestry[] {
    if (Array.isArray(json)) {
      return  json.map(Ancestry.fromJson) as Ancestry[];
    }

    const result = new Ancestry();
    const { parents } = json;

    parents.forEach(parent => {
      parent.parentId = json.id;
    });

    json.parents = Parent.fromJson(parents);
    Object.assign(result, json);
    return result;
  }
如果我有孙子,你有没有想过如何把祖先拉出来

数据在mockaroo curl()上

例如,使用下面的json和
grant.id=5
,我将使用下面的id创建和数组

['5','0723','133','1']


也许有很多方法可以解决这个问题,但在我看来,最简单的方法是在数据结构中进行搜索,并按与查找时相反的顺序存储ID。这样,输出就是您所追求的

您也可以颠倒不同方法的顺序

我想指出,json结构有点奇怪。我希望它只包含嵌套的
子数组
而不将它们重命名为
父数组
子数组
,以及
孙子数组

let数据=[{
“id”:“1”,
“名称”:“鹿,斑点”,
“父母”:[
{
“id”:“133”,
“姓名”:“詹姆·科尔德里克”,
“儿童”:[
{
“id”:“0723”,
“姓名”:“Ardys Kurten”,
“孙子女”:[
{
“id”:“384”,
“姓名”:“Madelle Bauman”
},
{
“id”:“0576”,
“名称”:“Pincas Maas”
},
{
“id”:“5”,
“名称”:“Corrie Beacock”
}
]
}]
}]
}]
const expectedResults=['5','0723','133','1']
函数遍历InverseResults(inputId,childArray){
if(!childArray){return}
for(子数组的常量父级){
if(parent.id==inputId){
return[parent.id]
}否则{
让res=traverseInverseResults(inputId,parent.parents | | | | | parent.children | | | parent.grandrens)//这部分有点粗糙,只是为了适应奇怪的JSON结构。
如果(res){
res.push(parent.id)
返回res
}
}
}
返回
}
let result=traverseInverseResults('5',数据)
console.log('results',result)

console.log('Got expected results?',expectedResults.length===result.length&&expectedResults.every(函数(值,索引){return value===result[index]}))
json并不是真的代表我的祖先和糟糕的命名。我会接受这个答案,但是我在发布另一个问题,你可能不知道如何解决。这是新发布的问题。添加
parentId
与您的问题有什么关系?
[{
  "id": "1",
  "name": "Deer, spotted",
  "parents": [
    {
      "id": "133",
      "name": "Jaime Coldrick",
      "children": [
        {
          "id": "0723",
          "name": "Ardys Kurten",
          "grandchildren": [
            {
              "id": "384",
              "name": "Madelle Bauman"
            },
            {
              "id": "0576",
              "name": "Pincas Maas"
            },
            {
              "id": "5",
              "name": "Corrie Beacock"
            }
          ]
        },