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

274
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

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 Denunciar

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 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