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

272
Views
Emitir ordenar los valores en orden ascendente

Estoy tratando de organizar los valores dados en orden ascendente

 const value = [ { val: "11-1" }, { val: "12-1b" }, { val: "12-1a" }, { val: "12-700" }, { val: "12-7" }, { val: "12-8" }, ];

Estoy usando el siguiente código para ordenar esto en orden ascendente:

 value.sort((a,b)=>(a.val >b.val)? 1:((b.val>a.val)?-1:0));

El resultado de este tipo está en el orden 11-1,12-1a, 12-1b, 12-7, 12-700, 12-8 . Sin embargo, quiero que el orden sea 11-1,12-1a, 12-1b, 12-7, 12-8, 12-700 .

¿Cómo puedo lograr eso?

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

0

Si solo está interesado en ordenar por el valor después del guión, puede lograrlo con este código:

 const value = [ {val:'12-1'}, {val:'12-700'}, {val:'12-7'}, {val:'12-8'}, ]; const sorted = value.sort((a,b) => { const anum = parseInt(a.val.split('-')[1]); const bnum = parseInt(b.val.split('-')[1]); return anum - bnum; }); console.log(sorted);

about 4 years ago · Juan Pablo Isaza Report

0

actualizó la respuesta a medida que su pregunta se actualiza aquí está la solución para esto:

 const value = [{ val: '11-1' }, { val: '12-1b' }, { val: '12-1a' }, { val: '12-700' }, { val: '12-7' }, { val: '12-8' }]; const sortAlphaNum = (a, b) => a.val.localeCompare(b.val, 'en', { numeric: true }); console.log(value.sort(sortAlphaNum));
about 4 years ago · Juan Pablo Isaza Report

0

Si desea verificar diferentes valores tanto antes como después del guión e incluir la verificación de letras, la solución al final resolverá esto.

Esto es lo que hice:

Creó una expresión regular para dividir los caracteres por tipo:

 var regexValueSplit = /(\d+)([az]+)?-(\d+)([az]+)?/gi;

Creó una función de comparación para tener en cuenta números y letras:

 function compareTypes(alpha, bravo) { if (!isNaN(alpha) && !isNaN(bravo)) { return parseInt(alpha) - parseInt(bravo); } return alpha > bravo; }

Divida los valores según regexValueSplit :

 value.sort((a, b) => { let valuesA = a.val.split(regexValueSplit); let valuesB = b.val.split(regexValueSplit);

Esto produce los siguientes resultados (cadena de ejemplo "12-1a"):

 [ "", "12", null, "1", "a", "" ]

Luego, dado que todas las matrices divididas deben tener la misma longitud, compare cada valor en un bucle for :

 for (let i = 0; i < valuesA.length; i++) { if (valuesA[i] !== valuesB[i]) { return compareTypes(valuesA[i], valuesB[i]); } } // Return 0 if all values are equal return 0; 

 const value = [{ val: "11-1" }, { val: "12-1b" }, { val: "12-1a" }, { val: "12-700" }, { val: "12-7" }, { val: "12-8" }, ]; var regexValueSplit = /(\d+)([az]+)?-(\d+)([az]+)?/gi; function compareTypes(alpha, bravo) { if (!isNaN(alpha) && !isNaN(bravo)) { return parseInt(alpha) - parseInt(bravo); } return alpha > bravo; } value.sort((a, b) => { let valuesA = a.val.split(regexValueSplit); let valuesB = b.val.split(regexValueSplit); for (let i = 0; i < valuesA.length; i++) { if (valuesA[i] !== valuesB[i]) { return compareTypes(valuesA[i], valuesB[i]); } } return 0; }); console.log(JSON.stringify(value, null, 2));

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!