Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

205
Views
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 answers
Answer question

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 Report

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!