Как из плоского массива сделать вложенный?

Есть плоский массив:
someitems:{
0: {id: 1, name: "Text", alias: "somealias",  parent_id: "0"}
1: {id: 2, name: "Text", alias: "somealias",  parent_id: "0"}
2: {id: 3 name: "Text", alias: "somealias", parent_id: "1"}
3: {id: 4, name: "Text", alias: "somealias", parent_id: "1"}
4: {id: 5, name: "Text", alias: "somealias", parent_id: "2"}
5: {id: 6, name: "Text", alias: "somealias", parent_id: "2"}


Надо превратить в дерево:
0: {id: 1, 
     name: "Text", 
     alias: "somealias",  
     parent_id: "0"
     childs: {
             0: {id: 3 name: "Text", alias: "somealias", parent_id: "1"}
             1: {id: 4, name: "Text", alias: "somealias", parent_id: "1"}
     } 
}
1: {id: 2, 
     name: "Text", 
     alias: "somealias",  
     parent_id: "0"
     childs: {
             0: {id: 3 name: "Text", alias: "somealias", parent_id: "2"}
             1: {id: 4, name: "Text", alias: "somealias", parent_id: "2"}
     } 
}


Отношение родитель-ребёнок определяется свойствами id и parent_id.
  • Вопрос задан
  • 139 просмотров
Решения вопроса 1
0xD34F
@0xD34F Куратор тега JavaScript
function createTree(data, idField, parentField, rootParent) {
  const tree = { [rootParent]: { children: {} } };

  data.forEach(n => tree[n[idField]] = { ...n, children: {} });
  data.forEach(n => tree[n[parentField]].children[n[idField]] = tree[n[idField]]);

  return tree[rootParent].children;
}


const tree = createTree(someitems, 'id', 'parent_id', '0');
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы