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

199
Vistas
clasificación de matriz anidada de javascript, basada en una matriz de clasificaciones internas de longitud variable

La matriz externa debe ordenarse en función de la combinación de clasificaciones de la matriz de "pruebas" internas de longitud variable de cada estudiante, de forma ascendente. Aquí hay una versión simplificada de los datos sin procesar.

 [ { "studentId": "A", "tests": [ { "testId": 100, "rank": 2 }, { "testId": 101, "rank": 1 }, { "testId": 102, "rank": 1 } ] }, { "studentId": "G", "tests": [ { "testId": 103, "rank": 3 }, { "testId": 104, "rank": 6 }, { "testId": 105, "rank": 3 }, { "testId": 106, "rank": 4 }, { "testId": 107, "rank": 3 } ] } ]

Para abreviar, aquí hay una ilustración comentada para capturar las reglas para clasificar y desempatar. Imagine que cada uno de los siguientes representa la secuencia preordenada de los rangos de prueba individuales de cada estudiante. (Tenga en cuenta que los ID de prueba no importan, excepto para preservarlos. No nos preocupa comparar pruebas individuales, solo la combinación general de rangos de cada estudiante):

 StudentId : [ascending sequence of test ranks] A : [ 1, 1, 2] // A beats B due to 2nd element B : [ 1, 2, 2] // B beats C due to 1st element C : [ 2, 3] // Let C beat D due to shorter length! D : [ 2, 3, 3] // D beats E due to 1st element E : [ 3, 3, 3, 4, 5, 7] // E beats F and G due to 5th element F : [ 3, 3, 3, 4, 6] // F and G are tied. Let F beat G due to studentId! (alphanumeric ascending) G : [ 3, 3, 3, 4, 6]

Ninguno de los datos sin procesar está ordenado. Salida finalizada para incluir una matriz externa ordenada, con la matriz de prueba de cada estudiante ordenada por rango. Por favor, hágamelo saber si algo no está claro, y gracias.

about 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Entonces, básicamente, la matriz debe ordenarse según la sum de los rangos de prueba en orden ascendente, ¿sí?

 function sumTestRanks(students) { for(let student of students) { sumStudentTestRanks(student); } } function sumStudentTestRanks(student) { let testsRankTotal = 0; const tests = student.tests; for(let test of tests) { testsRankTotal += test.rank; } student.testsRankTotal = testsRankTotal; } function studentsSorter(studentA, studentB) { if(studentA.testsRankTotal < studentB.testsRankTotal) { return -1; } if(studentA.testsRankTotal > studentB.testsRankTotal) { return 1; } return studentA.studentId.localeCompare(studentB.studentId); } const students = [...]; sumTestRanks(students) console.log(students.sort(studentsSorter));

Actualizar:

En ese caso, va así:

  1. Determinar el tamaño mínimo comparable
  2. Haz una comparación dentro de esa longitud.
  3. Si es una corbata dentro del tamaño comparable
    • Compare por id, si ambos tamaños de prueba son iguales.
    • Por último, compare por longitud
 function studentsSorter(studentA, studentB) { const studentATests = studentA.tests; const studentBTests = studentB.tests; const studentATestsLength = studentATests.length; const studentBTestsLength = studentBTests.length; let scanLength = studentATestsLength; if(scanLength > studentBTestsLength) { scanLength = studentBTestsLength; } for(let index = 0; index < scanLength; index++) { const studentATest = studentATests[index]; const studentBTest = studentBTests[index]; if(studentATest.rank === studentBTest.rank) { continue; } if(studentATest.rank < studentBTest.rank) { return -1; } else if(studentATest.rank > studentBTest.rank) { return 1; } } if(studentATestsLength === studentBTestsLength) { return studentA.studentId.localeCompare(studentB.studentId); } else if(studentATestsLength < studentBTestsLength) { return -1; } else { return 1; } }

Hice referencia a esta respuesta para comprender cómo funciona el comparador en JavaScript.

about 4 years ago · Santiago Trujillo 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