У меня есть множество объектов (возможных тысяч), которые могут быть или не быть вложенными (возможные десятки гнезд). Подмножество данных выглядит следующим образом: < /p>
let data = [
{"id":"m1", "name":"M1"},
{"id":"m2", "name":"M2"},
{"parent_id":"m2", "id":"s1", "name":"S1"},
{"parent_id":"m2", "id":"s2", "name":"S2"},
{"parent_id":"m2", "id":"s3", "name":"S3"},
{"parent_id":"s3", "id":"b1", "name":"B1"}
];
< /code>
Этот список выглядит довольно заказано, но в реальной жизни объекты могут появиться в любом месте в массиве, т.е. не заказано. Также обратите внимание, что объекты на верхнем слое не имеют parent_id. Я бы хотел, чтобы массив был преобразован в: < /p>
newData = [
{ id: 'm1', name: 'M1'},
{ id: 'm2', name: 'M2', children:
[ { parent_id: 'm2', id: 's1', name: 'S1'},
{ parent_id: 'm2', id: 's2', name: 'S2'},
{ parent_id: 'm2', id: 's3', name: 'S3', children:
{ parent_id: 's3', id: 'b11', name: 'B1'}
} ]
}
]
< /code>
Я искал различные идеи и решил, что этот ответ приблизился, так что вот где я начал: < /p>
const createDataTree = dataset => {
let hashTable = Object.create(null)
dataset.forEach( aData => hashTable[aData.id] = { ...aData, children : [] } )
let dataTree = []
dataset.forEach( aData => {
if( aData.parent_id ) hashTable[aData.parent_id].children.push(hashTable[aData.id])
else dataTree.push(hashTable[aData.id])
} )
return dataTree
};
console.log(createDataTree(data));
< /code>
Были очевидны две начальные проблемы- я не хочу, чтобы объекты без детей имели пустое свойство- Дети: [], и этот код работает только с одним дочерним уровнем, а не с множеством. /p>
Для первого выпуска я попробовал: < /p>
const createDataTree = dataset => {
let hashTable = Object.create(null)
let dataTree = []
dataset.forEach( aData => {
if( !aData.parent_id ) hashTable[aData.id] = { ...aData, children : [] }
if( aData.parent_id ) hashTable[aData.parent_id].children.push(hashTable[aData.id])
else dataTree.push(hashTable[aData.id])
} )
return dataTree
};
console.log(createDataTree(data))
< /code>
Это не сработало (во всех объектах все еще были дети: []), а также я не понимаю, как хвосные ссылки, такие как DataTree, автоматически обновляется, когда Хэштебильный толчок происходит.
Мне нравится этот подход из-за его производительности с большими массивами- какие изменения необходимы для детей: [] и множественные уровни, или есть более быстрое решение?
Подробнее здесь: https://stackoverflow.com/questions/794 ... sub-levels
Создание иерархического массива объектов со многими подразделениями ⇐ Javascript
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Создание иерархического представления пользовательских элементов в приложении MAUI
Anonymous » » в форуме C# - 0 Ответы
- 28 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Преобразовать SQL с подразделениями в предложении SELECT в Active Record CodeIgniter
Anonymous » » в форуме Php - 0 Ответы
- 16 Просмотры
-
Последнее сообщение Anonymous
-