Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

108
Visualizações
¿Cómo puedo ordenar una matriz de javascript de objetos que especifican requisitos previos entre ellos?

Tengo una serie de objetos que determinan cuáles deben mostrarse primero. Un ejemplo de esta matriz sería:

 [ { "id": "b94ae1a5-c6b2-4e45-87cd-a4036fdb7870", "prerequisites_ids": [ "2a4fdd9c-45d0-49d9-a0eb-ba5a0464f2b1" ] }, { "id": "ef7d2415-808f-4efc-939e-2692f38a5ee7", "prerequisites_ids": [ "74e41a2c-e74e-4016-bb2c-f2e84c04fe92" ] }, { "id": "74e41a2c-e74e-4016-bb2c-f2e84c04fe92", "prerequisites_ids": [] }, { "id": "2a4fdd9c-45d0-49d9-a0eb-ba5a0464f2b1", "prerequisites_ids": [ "ef7d2415-808f-4efc-939e-2692f38a5ee7" ] } ]

¿Cómo podría ordenarlo para obtener esto?

 [ { "id": "74e41a2c-e74e-4016-bb2c-f2e84c04fe92", "prerequisites_ids": [] }, { "id": "ef7d2415-808f-4efc-939e-2692f38a5ee7", "prerequisites_ids": [ "74e41a2c-e74e-4016-bb2c-f2e84c04fe92" ] }, { "id": "2a4fdd9c-45d0-49d9-a0eb-ba5a0464f2b1", "prerequisites_ids": [ "ef7d2415-808f-4efc-939e-2692f38a5ee7" ] }, { "id": "b94ae1a5-c6b2-4e45-87cd-a4036fdb7870", "prerequisites_ids": [ "2a4fdd9c-45d0-49d9-a0eb-ba5a0464f2b1" ] } ]

He intentado crear una función personalizada:

 export function comparePrerequisites(a, b) { if (!a.prerequisites_ids) { return -1 } if (a.prerequisites_ids.includes(b.id)) { return 1; } } data.sort(comparePrerequisites)

pero no parece funcionar. ¡Gracias por adelantado!

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Tenemos aquí los requisitos para una ordenación topológica . Este no es un trabajo para el método de sort . En su lugar, puede usar la recursividad (un recorrido DFS) para profundizar en una dependencia que ya está recopilada o en una hoja (sin dependencias).

Aquí hay una implementación:

 function topologicalSort(tasks) { const visited = new Set; const taskMap = new Map(tasks.map(task => [task.id, task])); function dfs(tasks) { for (let task of tasks) { if (!visited.has(task.id)) { dfs(task.prerequisites_ids.map(id => taskMap.get(id))); } visited.add(task); } } dfs(tasks); return [...visited]; } // Demo on your example: let tasks = [{"id": "b94ae1a5-c6b2-4e45-87cd-a4036fdb7870","prerequisites_ids": ["2a4fdd9c-45d0-49d9-a0eb-ba5a0464f2b1"]},{"id": "ef7d2415-808f-4efc-939e-2692f38a5ee7","prerequisites_ids": ["74e41a2c-e74e-4016-bb2c-f2e84c04fe92"]},{"id": "74e41a2c-e74e-4016-bb2c-f2e84c04fe92","prerequisites_ids": []},{"id": "2a4fdd9c-45d0-49d9-a0eb-ba5a0464f2b1","prerequisites_ids": ["ef7d2415-808f-4efc-939e-2692f38a5ee7"]}]; console.log(topologicalSort(tasks));

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda