Получить значение из ключа родителя и передать его ключу детей в объекте - PullRequest
2 голосов
/ 05 апреля 2020

У меня есть такая структура: "root/parentId/id/parentId/it..." и др. c. Например, путь: "root/1/2/4".

Как динамически поместить значение в ключ "path", чтобы получить полный путь к элементу root?

Ответы [ 3 ]

0 голосов
/ 05 апреля 2020

Рекурсивное решение:

updatePath(array, 'root');

function updatePath(array, path) {
    array.forEach((element, i) => {
        element.path = path + '/' + (i + 1);
        if(element.hasOwnProperty('children')) {
           updatePath(element.children, element.path);
        } 
    });
}
0 голосов
/ 05 апреля 2020

Ваша структура данных не учитывает детство каждого элемента, но, учитывая, что это не является частью вопроса, вот простое рекурсивное решение:

const data = [{
    "id": "1",
    "parentId": "root",
    "path": "root",
    "children": [{
        "id": "2",
        "parentId": "1",
        "path": "1/2",
        "children": [{
            "id": "4",
            "parentId": "2",
            "path": "2/4"
          }
        ]
      }, {
        "id": "3",
        "parentId": "1",
        "path": "1/3"
      }
    ]
  },
  {
    "id": "4",
    "parentId": "2",
    "path": "2/4"
  }
];

function assignPath(tree, index, array, currentPath) {
  tree.path = currentPath || 'root';
  tree.children && tree.children.forEach(child => {
    assignPath(child, null, null, `${tree.path}/${child.id}`);
  });
}

data.forEach(assignPath);

console.log(data);
0 голосов
/ 05 апреля 2020

Вам потребуется идентифицировать узел root и начать с его пути.

Затем добавьте каждый последовательный дочерний идентификатор в конец пути.

let obj = {
  0: [{
    "id": "1",
    "parentId": "root",
    "path": "root",
    "children": [{
      "id": "2",
      "parentId": "1",
      "path": "1/2",
      "children": [{
        "id": "4",
        "parentId": "2",
        "path": "2/4"
      }]
    }, {
      "id": "3",
      "parentId": "1",
      "path": "1/3"
    }]
  }]
};

console.log(getRoute(obj[0][0], true)); // Identify root

function getRoute(node, isRoot) {
  return node != null
    ? (isRoot
      ? (node.path + '/')
      : ''
    ) + node.id + (node.children
      ? '/' + getRoute(node.children[0], false)
      : '')
    : '';
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...