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
Ordenar una matriz de objetos en función de todos sus valores de propiedad
function sortedPeopleArray(peopleArray) { arrayCopy = [...peopleArray]; function compare(a, b) { const nameA = a.name.toUpperCase(); const nameB = b.name.toUpperCase(); let comp = 0; if (nameA > nameB) { comp = 1; } else if (nameA < nameB) { comp = -1; } return comp; } arrayCopy.sort(compare); arrayCopy.sort(function(a,b) { return (a.satisfaction - b.satisfaction) * -1; }); arrayCopy.sort(function(a,b) { return (a.rating - b.rating) * -1; }); arrayCopy.sort(function(a,b) { return (a.age - b.age) * -1; }); return arrayCopy; }

Intenté ordenar una matriz en función de todos sus valores de propiedad, pero mi función no devuelve el resultado deseado. ¿Hay una mejor manera de abordar esto?

¿Cómo ordenaría una matriz de objetos (código a continuación) en orden descendente de:

  1. edad (de mayor a menor)
  2. calificación (de mayor a menor)
  3. satisfacción (de mayor a menor)
  4. nombre (por orden alfabético)

Estas propiedades se consideran exactamente en ese orden al ordenar

Si dos valores son iguales, se examina la siguiente propiedad de la lista para determinar qué persona se coloca primero. p.ej. si dos personas tienen la misma calificación, la persona con un número de satisfacción más alto se coloca primero

 const array = [ { name: A age: 22 rating: 5 satisfaction: 2 }, { name: B age: 25 rating: 7 satisfaction: 4 }, { name: C age: 22 rating: 9 satisfaction: 8 }, ];

La matriz de salida debe ser

 result = [ { name: B, age: 25, rating: 7, satisfaction: 4, }, { name: C age: 22 rating: 9 satisfaction: 8 }, { name: A age: 22 rating: 5 satisfaction: 2 }, ];
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Debe aplicar las comparaciones una tras otra, unidas por el operador "o" ( || ). El operador or no procesará su segundo argumento si se determina que el primero es verdadero, es decir, si devolvió un valor diferente de 0.

La comparación de números se logra más fácilmente mediante una simple resta. Las cadenas se pueden comparar con String.prototype.localeCompare() :

 const arr = [{name: "A",age: 22,rating: 5,satisfaction: 2},{name: "B",age: 25,rating: 7,satisfaction: 4},{name: "C",age: 22,rating: 9,satisfaction: 8}]; arr.sort((a,b)=> b.age-a.age || b.rating-a.rating || b.satisfaction-a.satisfaction || b.name.localeCompare(a.name)) console.log(arr);

about 4 years ago · Juan Pablo Isaza Denunciar

0

Haz la comparación todo en una sola función.

 function compare(oA, oB) { if(oA.age == oB.age) { if(oA.rating == oB.rating) { if(oA.satisfaction == oB.satisfaction) { const nameA = oA.name.toUpperCase(); const nameB = oB.name.toUpperCase(); let comp = 0; if (nameA > nameB) { comp = 1; } else if (nameA < nameB) { comp = -1; } return comp; } else { return oB.satisfaction - oA.satisfaction; } } else { return oB.rating - oA.rating; } } else { return oB.age - oA.age; } } const array = [ { name: 'A', age: 22, rating: 5, satisfaction: 2 }, { name: 'B', age: 25, rating: 7, satisfaction: 4 }, { name: 'C', age: 22, rating: 9, satisfaction: 8 }, ]; let arrayCopy = [...array]; arrayCopy.sort(compare); console.log(arrayCopy)

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