Существует массив данных, который необходимо преобразовать в дерево:
const array = [{
id: 5,
name: 'vueJS',
parentId: [3]
}, {
id: 6,
name: 'reactJS',
parentId: [3]
}, {
id: 3,
name: 'js',
parentId: [1]
}, {
id: 1,
name: 'development',
parentId: null
}, {
id: 4,
name: 'oracle',
parentId: [1,2]
}, {
id: 2,
name: 'data-analysis',
parentId: null
}];
Теперь все работает с помощью этой функции:
function arrayToTree(array, parent) {
var unflattenArray = [];
array.forEach(function(item) {
if(item.parentId === parent) {
var children = arrayToTree(array, item.id);
if(children.length) {
item.children = children
}
unflattenArray.push(item)
}
});
return unflattenArray;
}
console.log(arrayToTree(array, null));
У меня есть две проблемы с этой функцией:
- Значением parentId должен быть массив идентификаторов, например -
"parentId": [2, 3]
- Как передать в функцию только один аргумент - "массив"?
https://codepen.io/pershay/pen/PgVJOO?editors=0010