Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

86
Vistas
Ordenar objeto estructurado en árbol por otro objeto

Tengo la siguiente estructura de archivos sin ordenar:

 const files: File[] = [ {info: {name: "Part 3"}, contents: [ {info: {name: "05 Chapter"}, contents: [], isHidden: false}, {info: {name: "10 Chapter"}, contents: [], isHidden: false}, {info: {name: "03 Annex"}, contents: [], isHidden: false} ], isHidden: false }, {info: {name: "Part 1"}, contents: [ {info: {name: "05 Chapter"}, contents: [], isHidden: false}, {info: {name: "10 Annex"}, contents: [], isHidden: false}, {info: {name: "03 Chapter"}, contents: [], isHidden: false} ], isHidden: false} ]

Me gustaría ordenar este objeto de árbol de archivos sin clasificar por files.info.name en función de otro objeto de entrada (que es un objeto estructurado de marcador simple) que se ve así:

 const bookmark = [ { part: "Part 1", chapters: [ { name: "03 Annex", chapters: [] }, { name: "05 Chapter", chapters: [] }, { name: "10 Chapter", chapters: [] } ] }, { part: "Part 3", chapters: [ { name: "03 Chapter", chapters: [] }, { name: "05 Chapter", chapters: [] }, { name: "10 Annex", chapters: [] } ] } ]

Tengo lo siguiente hasta ahora, pero no creo que pase por cada nivel.

 // sortFilesByBookmark sorts the files to show by a given bookmark object export function sortFilesByBookmark(files: File[], bookmark){ files.sort(function(a, b){ return bookmark.indexOf(a.info.name) - bookmarkArray.indexOf(b.info.name); }); }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Usar una función recursiva

 interface XFile { info: { name: string }; isHidden: boolean; contents: XFile[]; } interface Bookmark { // You should consider naming `part` & `name` the same part?: string; name?: string; chapters: Bookmark[]; } export function sortFilesByBookmark(files: XFile[], bookmarks: Bookmark[]): XFile[] { // Sort file as bookmarks const sorted = files.sort((a, b) => { return bookmarks.findIndex(x => a.info.name === (x.part || x.name)) - bookmarks.findIndex(x => b.info.name === (x.part || x.name)); }) // Nest sort sorted.forEach((f, ix) => { const bk = bookmarks.find(x => f.info.name === (x.part || x.name)); f.contents = sortFilesByBookmark(f.contents, bk.chapters); }) return sorted; }
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda