Возвращение вверх по дереву после завершения первой ветви рекурсии в JavaScript - PullRequest
0 голосов
/ 04 марта 2020

У меня есть данные в myObject объекте со следующей формой. Я хотел бы получить информацию из массива downloads, используя executeMyFunction () на каждом уровне:

{
 title (string)
 downloads [{}]
 contains [{
   title (string)
   downloads [{}]
   contains [{
     title (string)
     downloads [{}]
     contains [{}]
   }]
 }]
}

Я написал следующую рекурсивную функцию, которая хорошо работает для перехода по дереву:

const recurseTree = (tree: any[]) => {
  tree.forEach(a => {
    a.downloads.forEach(b => {
      this.performMyFunction(b.type);
    });

    recurseTree(a.contains);
  });
};

recurseTree([myObject]);

У меня вопрос, как только я нахожусь на листе, как мне тогда проверить родную или родительскую ветку, пока все дерево не будет проанализировано?

1 Ответ

1 голос
/ 04 марта 2020

Что вы обычно делаете здесь, это передаете другой параметр в вашу функцию, который может называться parent.

например.

const recurseTree = (tree: any[], parent) => {

  if (parent) {
    //we have access to parent here..
  }  
  tree.forEach(a => {
    a.downloads.forEach(b => {
      this.performMyFunction(b.type);
    });
    recurseTree(a.contains, tree);  //let pass this tree as the parent
  });
};

recurseTree([myObject], null);  //we are the parent, lets pass null
...