Estoy buscando la forma más fácil de ordenar una matriz que consta de números y texto, y una combinación de estos.
P.ej
'123asd'
'19asd'
'12345asd'
'asd123'
'asd12'
se convierte en
'19asd'
'123asd'
'12345asd'
'asd12'
'asd123'
Esto se usará en combinación con la solución a otra pregunta que he hecho aquí .
La función de clasificación en sí misma funciona, lo que necesito es una función que pueda decir que '19asd' es más pequeño que '123asd'.
Estoy escribiendo esto en JavaScript.
Editar: como señaló adormitu , lo que estoy buscando es una función para la clasificación natural
How do you do string comparison in JavaScript?
en stackoverflow.com/questions/51165/…Respuestas:
Esto ahora es posible en los navegadores modernos que usan localeCompare. Al pasar la
numeric: true
opción, reconocerá inteligentemente los números. Puede hacer mayúsculas y minúsculas usandosensitivity: 'base'
. Probado en Chrome, Firefox e IE11.Aquí hay un ejemplo. Regresa
1
, lo que significa que 10 va después de 2:'10'.localeCompare('2', undefined, {numeric: true, sensitivity: 'base'})
Para el rendimiento al ordenar grandes cantidades de cadenas, el artículo dice:
fuente
Entonces, ¿necesitas un tipo natural ?
Si es así, entonces quizás este guión de Brian Huisman basado en el trabajo de David Koelle sería lo que necesita.
Parece que la solución de Brian Huisman ahora está alojada directamente en el blog de David Koelle:
fuente
Para comparar valores, puede usar un método de comparación:
Pero para acelerar la ordenación de una matriz, manipule la matriz antes de ordenarla, de modo que solo tenga que hacer conversiones en minúsculas y la expresión regular una vez en lugar de en cada paso de la ordenación.
fuente
String.prototype.tlc()
? ¿Es este tu propio código o lo obtuviste de alguna parte? Si es esto último, por favor enlace a la página.Si tiene una variedad de objetos, puede hacer esto:
Mostrar fragmento de código
fuente
La biblioteca más completa para manejar esto a partir de 2019 parece ser de orden natural .
No solo toma matrices de cadenas, sino que también puede ordenar por el valor de una determinada clave en una matriz de objetos. También puede identificar y ordenar automáticamente cadenas de: monedas, fechas, moneda y muchas otras cosas.
Sorprendentemente, también es solo 1.6kB cuando se comprime.
fuente
Imagine una función de relleno de 8 dígitos que transforma:
Podemos utilizar las cadenas acolchadas para ayudarnos a clasificar '19asd' para que aparezca antes de '123asd'.
Use la expresión regular
/\d+/g
para ayudar a encontrar todos los números que deben rellenarse:A continuación se muestra la clasificación mediante esta técnica:
Los resultados intermedios muestran lo que hace la rutina natural_expand () y le da una idea de cómo funcionará la rutina natural_compare posterior:
Salidas:
fuente
Sobre la base de la respuesta de @Adrien Be anterior y utilizando el código que crearon Brian Huisman y David Koelle , aquí hay un prototipo modificado para una variedad de objetos:
fuente