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

385
Views
jQuery: cómo ordenar el texto de la lista teniendo en cuenta los valores numéricos

Estoy usando el siguiente script (jQuery 2.1.1) para ordenar una lista con texto y valores numéricos. En teoría, la clasificación funciona porque entre "iPhone 11" y "iPhone 6", "iPhone 1" viene antes que "iPhone 6", pero en el mundo real eso no tiene sentido porque 6<11 y "iPhone 6"<"iPhone 11 ".

 $('ul').children("li").sort(function(a, b) { var A = $(a).text().toUpperCase(); var B = $(b).text().toUpperCase(); return (A < B) ? -1 : (A > B) ? 1 : 0; }).appendTo('ul');

Cómo debe ser la clasificación:

 iPhone 6 iPhone 8 iPhone 11 iPhone 12 samsung galaxy s8 samsung galaxy s10 samsung galaxy s20

qué clasificación devuelve:

 iPhone 11 iPhone 12 iPhone 6 iPhone 8 samsung galaxy s10 samsung galaxy s20 samsung galaxy s8

¿Cuál sería el mejor enfoque? Estoy pensando en eliminar todo el texto y clasificarlo según los números enteros que quedan, pero si hiciera eso, en la lista actual, los modelos "galaxy" aparecerían entre los modelos "iphone" (lo que tampoco tiene sentido) así:

 iPhone 6 iPhone 8 samsung galaxy s8 samsung galaxy s10 iPhone 11 iPhone 12 samsung galaxy s20
about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Como tiene que ordenar el texto donde incluye números, haga lo siguiente:

 return A.localeCompare(B, false, { numeric: true })

Puede encontrar más información en localCompare y las opciones aquí

Así que tu código se verá así:

 $('ul').children("li").sort(function(a, b) { var A = $(a).text().toUpperCase(); var B = $(b).text().toUpperCase(); return A.localeCompare(B, false, { numeric: true }) }).appendTo('ul');

Manifestación

 $('ul').children("li").sort(function(a, b) { var A = $(a).text().toUpperCase(); var B = $(b).text().toUpperCase(); return A.localeCompare(B, false, { numeric: true }) }).appendTo('ul');
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <ul> <li>iPhone 6</li> <li>iPhone 8</li> <li>samsung galaxy s8</li> <li>samsung galaxy s10</li> <li>iPhone 11</li> <li>iPhone 12</li> <li>samsung galaxy s20</li> </ul>

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!