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

206
Vistas
jQuery ordenar por dos valores no funciona y solo ordena por primer valor

Tengo una matriz que se ve así

 ['NAME', 5, '2. Defender', 'FALSE', 'TRUE', 'FALSE', 'undefined'] ['NAME', 5, '4. Forward', 'TRUE', 'TRUE', 'FALSE', 'undefined'] ['NAME', 5, '2. Defender', 'FALSE', 'TRUE', 'FALSE', 'undefined'] ['NAME', 4, '4. Forward', 'FALSE', 'TRUE', 'FALSE', 'undefined'] ['NAME', 3, '5. Midfielder', 'FALSE', 'FALSE', 'FALSE', 'undefined']

Estoy haciendo referencia a esta página sobre cómo ordenarlo, y esto es lo que tengo:

 array.sort( function(a, b) { if (a[1] === b[1]) { // Price is only important when cities are the same return b[2] - a[2]; } return a[1] < b[1] ? 1 : -1; });

Solo ordena por el valor [1] y no ordenará por el valor secundario [2] . Pensé que podría haber algún problema con mi matriz, pero cuando cambio las cosas para ordenar por [2] primero, entonces se ordena bien por ese valor. Aunque el objetivo es ordenar primero por [1] y luego ordenar por [2] en segundo lugar.

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

El tercer elemento de la matriz [2] es una cadena que no puede comparar por sustracción. Use .localeCompare en su lugar

 array.sort((a, b) => a[1] !== b[1] ? a[1] - b[1] : a[2].localeCompare(b[2]))
about 4 years ago · Juan Pablo Isaza Denunciar

0

Está intentando realizar una operación matemática con dos cadenas ( '2. Defender' vs. '4. Forward' ).
Puede anidar la misma comparación que hace para a[1] vs. b[1] como se muestra a continuación:

 let array = [ ['ONE1', 5, '2. Defender', 'FALSE', 'TRUE', 'FALSE', 'undefined'], ['TWO2', 5, '4. Forward', 'TRUE', 'TRUE', 'FALSE', 'undefined'], ['THR3', 5, '2. Defender', 'TRUE', 'TRUE', 'FALSE', 'undefined'], ['FOR4', 4, '4. Forward', 'FALSE', 'TRUE', 'FALSE', 'undefined'], ['FIV5', 3, '5. Midfielder', 'FALSE', 'FALSE', 'FALSE', 'undefined'] ] array.sort(function(a, b) { if (a[1] === b[1]) { // Price is only important when cities are the same if (a[2] === b[2]) { //return 0; /* or nest another comparison here and as many times as needed within each child `a[n]===b[n]` block */ if (a[3] === b[3]) { return 0; // or compare yet another col } return a[3] < b[3] ? 1 : -1; } return a[2] < b[2] ? 1 : -1; } return a[1] < b[1] ? 1 : -1; }) array.forEach((p) => { console.log(p[0]) })

De lo contrario, debe obtener el valor entero de esas cadenas para poder hacer los cálculos. Puede usar parseInt() o asignar un valor explícito de acuerdo con su lógica para cada columna de clasificación como se muestra a continuación:

 let array = [ ['ONE1', 5, '2. Defender', 'FALSE', 'TRUE', 'FALSE', 'undefined'], ['TWO2', 5, '4. Forward', 'TRUE', 'TRUE', 'FALSE', 'undefined'], ['THR3', 5, '2. Defender', 'TRUE', 'TRUE', 'FALSE', 'undefined'], ['FOR4', 4, '4. Forward', 'FALSE', 'TRUE', 'FALSE', 'undefined'], ['FIV5', 3, '5. Midfielder', 'FALSE', 'FALSE', 'FALSE', 'undefined'] ] array.sort(function(a, b) { if (a[1] === b[1]) { // Price is only important when cities are the same let c = parseInt(a[2]); let d = parseInt(b[2]); if (c === d) { // the string 'TRUE' before 'FALSE', '' or null let e = (a[3] === 'TRUE') ? 1 : 0; let f = (b[3] === 'TRUE') ? 1 : 0; return f - e; } return d - c; } return a[1] < b[1] ? 1 : -1; }) array.forEach((p) => { console.log(...p) })

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