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

104
Views
Cómo ordenar primero por Números y luego por Alfabético

Estoy tratando de ordenar una matriz:

 ["B3", "D2", "F1", "A9", "D12", "A2", "C1", "Z0", "B1"]

El resultado esperado debe ser:

 ["Z0", "B1", "C1", "F1", "A2", "D2", "B3", "A9", "D12"]

Aquí está mi código:

 let array = ["B3", "D2", "F1", "A9", "D12", "A2", "C1", "Z0", "B1"]; let collator = new Intl.Collator(undefined, { numeric: true, sensitivity: "base", }); console.log(array.sort(collator.compare));

Luego, la salida se ordena primero por Alfabeto, lo que da:

 ["A2", "A9", "B1", "B3", "C1", "D2", "D12", "F1", "Z0"]

Así que descubrí que si cambio la posición de cada valor de esta manera:

 ["3B", "2D", "1F", "9A", "12D", "2A", "1C", "0Z", "1B"]

Y luego páselo de nuevo en el intercalador, me dará la secuencia ordenada correcta, pero solo que el número y las letras están invertidos. Entonces tendré que darles la vuelta. ¿Hay una mejor manera de hacer esto?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Si siempre tiene una sola letra, puede ordenar por el resto numérico y por la primera letra.

 const array = ["B3", "D2", "F1", "A9", "D12", "A2", "C1", "Z0", "B1"]; array.sort((a, b) => a.slice(1) - b.slice(1) || a[0].localeCompare(b[0])); console.log(...array);

Si tiene más de una letra, puede tomar una expresión regular y obtener solo dígitos y no dígitos, separados en un objeto.

 const getValues = string => ({ letters: string.match(/\D+/)[0], digits: string.match(/\d+/)[0] }), array = ["B3", "D2", "F1", "A9", "D12", "A2", "C1", "Z0", "B1"]; array.sort((a, b) => { const [aa, bb] = [a, b].map(getValues); return aa.digits - bb.digits || aa.letters.localeCompare(bb.letters); }); console.log(...array);

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!