JavaScript найти рекурсивно по пути - PullRequest
1 голос
/ 07 марта 2019

У меня есть следующая структура данных:

[
  {
    name: 'root',
    children: [
      {
        name: 'page',
        children: [
          // and so on
        ]
      }
    ]
  }
]

Мне нужна функция, чтобы получить последний объект, заданный путем.Например, getCurrentTree('root.page') должно вернуться

      {
        name: 'page',
        children: [
          // and so on
        ]
      }

Надеюсь, вы понимаете, о чем я!Я знаю, что должен делать это рекурсивно, но рекурсия всегда является для меня головной болью.Также я не уверен, следует ли делать это с find или filter?или даже reduce?У кого-нибудь есть умная идея?

Приветствия

Ответы [ 2 ]

2 голосов
/ 07 марта 2019

Вы можете проверить имя и выполнить итерацию для детей или вернуть объект.

function getCurrentTree(array, names) {
    var [name, path] = names.split('.', 2),
        result;

    array.some(o => {
        if (o.name === name) {
            return result = path ? getCurrentTree(o.children, path) : o;
        }
    });
    return result
}

var data = [{ name: 'root', children: [{ name: 'page', children: [] }] }];

console.log(getCurrentTree(data, 'root.page'));
1 голос
/ 07 марта 2019

Что-то вроде?

let mainList = [
  {
    name: 'root',
    children: [
      {
        name: 'page',
        children: [

        ]
      }
    ]
  }
]

function getCurrentTree(path) {
  const paths = path.split('.')
  return traverse(mainList, paths, 0) 
}

function traverse(list, paths, level) {
  const node = list.find(obj => obj.name === paths[level])

  if (level === paths.length - 1) {
    return node
  } else {
    return traverse(node.children, paths, level + 1)
  }
}

getCurrentTree("root.page")
// => {name: "page", children: Array(0)}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...