Tengo una matriz de datos, necesito asegurarme de que los elementos estén ordenados por anidamiento (principal, secundario) y se sigan en orden alfabético tanto en el nivel superior como en el anidado.
Datos iniciales:
const arr = [ { id: 0, name: 'A', parentId: null, }, { id: 78, name: 'B', parentId: 77, }, { id: 1715, name: 'C', parentId: 78, }, { id: 77, name: 'D', parentId: null, }, { id: 1716, name: 'E', parentId: 1715, }, { id: 76, name: 'F', parentId: null, }, ];Mi enfoque no funciona porque no tiene en cuenta el anidamiento adicional de elementos.
function sortData() { const result = []; arr.sort((a, b) => { return a.name.localeCompare(b.name); }); for (const element of arr) { if (!element.parentId) { const children = folders.filter((el) => el.parentId === element.id); result.push(element, ...children); } } return result; }Que datos necesito obtener:
const arr = [ { id: 0, name: 'A', parentId: null, }, { id: 77, name: 'D', parentId: null, }, { id: 78, name: 'B', parentId: 77, }, { id: 1715, name: 'C', parentId: 78, }, { id: 1716, name: 'E', parentId: 1715, }, { id: 76, name: 'F', parentId: null, }, ];¿Qué datos obtengo usando mi enfoque?
const arr = [ { id: 0, name: 'A', parentId: null, }, { id: 77, name: 'D', parentId: null, }, { id: 78, name: 'B', parentId: 77, }, { id: 76, name: 'F', parentId: null, } ];simplemente use una función de clasificación simple
const arr = [ { id: 0, name: "A", parentId: null }, { id: 78, name: "B", parentId: 77 }, { id: 1715, name: "C", parentId: 78 }, { id: 77, name: "D", parentId: null }, { id: 1716, name: "E", parentId: 1715 }, { id: 76, name: "F", parentId: null } ]; arr.sort(function (a, b) { if(b.parentId == a.id) return b; return a.id - b.id; }); console.log('arr',arr)Funciona de mi lado usando una función de clasificación simple
const arr = [ { id: 0, name: 'A', parentId: null, }, { id: 78, name: 'B', parentId: 77, }, { id: 1715, name: 'C', parentId: 78, }, { id: 77, name: 'D', parentId: null, }, { id: 1716, name: 'E', parentId: 1715, }, { id: 76, name: 'F', parentId: null, }, ]; let result = [] const sortData = () => { arr.sort((a, b) => { return a.name.localeCompare(b.name); }); return arr; } console.log(sortData())