Я получаю данные JSON из таблицы, которая выглядит примерно так (очень упрощенно):
формат JSON, который я получаю, - этоследующее:
const myObjOriginal = {
"rows": [{
"name": "row 1",
"cells": [{
"name": "level 1",
"id": 1
}, {
"name": "first level 2",
"id": 2
}, {
"name": "endpoint 1",
"id": 4
}]
}, {
"name": "row 2",
"cells": [{
"name": "level 1",
"id": 1
}, {
"name": "first level 2",
"id": 2
}, {
"name": "endpoint 2",
"id": 5
}]
}, {
"name": "row 3",
"cells": [{
"name": "level 1",
"id": 1
}, {
"name": "second level 2",
"id": 3
}, {
"name": "endpoint 3",
"id": 6
}]
}]
};
Что мне нужно сделать, это превратить его в дерево вместо таблицы, с выводом, который выглядит следующим образом:
const goalObject = [{
"name": "level 1",
"id": 2,
"children": [{
"name": "first level 2",
"id": 2,
"children": [{
"name": "endpoint 1",
"id": 4
}, {
"name": "endpoint 2",
"id": 5
}]
}, {
"name": "second level 2",
"id": 3,
"children": [{
"name": "endpoint 3",
"id": 6
}]
}]
}];
Я перепробовал всетакие вещи, как отображение, уменьшение, фильтрация, для циклов и forEach, но безрезультатно.
Я понимаю, что мне нужно каким-то образом создать рекурсивную функцию, но я также не получил, чтобы это работало.
Вот пример одной вещи, которую я пробовал, но я знаю, что это совершенно неправильно ...
function getChildrenOfCurrentItem(rowIndex = 0, cellIndex = 0) {
let current = {};
let myObj = {};
for(let i = 0; i < myCopy.rows.length; i++){
next = myCopy.rows[i].cells[cellIndex];
const cells = myCopy.rows[i].cells;
const isSame = compareObjects(current, next);
if(!isSame){
current = next;
myObj.item = current;
//cellIndex++;
for(let j = 0; j < cells.length; j++){
let cell = cells[j];
console.log('cell', cell);
}
}
console.log('myObj', myObj);
//cellIndex++;
if(cellIndex < max) {
getChildrenOfCurrentItem(rowIndex, cellIndex);
}
rowIndex++;
}
return myObj;
}