Eu estou procurando a maneira mais fácil de classificar uma matriz que consiste em números e texto e uma combinação deles.
Por exemplo
'123asd'
'19asd'
'12345asd'
'asd123'
'asd12'
torna-se em
'19asd'
'123asd'
'12345asd'
'asd12'
'asd123'
Isso será usado em combinação com a solução para outra pergunta que fiz aqui .
A função de classificação em si funciona, o que eu preciso é de uma função que possa dizer que '19asd' é menor que '123asd'.
Estou escrevendo isso em JavaScript.
Edit: como adormitu apontou, o que estou procurando é uma função para a classificação natural
How do you do string comparison in JavaScript?
em stackoverflow.com/questions/51165/…Respostas:
Agora isso é possível em navegadores modernos usando o localeCompare. Ao passar a
numeric: true
opção, ele reconhecerá números de maneira inteligente. Você pode fazer distinção entre maiúsculas e minúsculas usandosensitivity: 'base'
. Testado no Chrome, Firefox e IE11.Aqui está um exemplo. Retorna
1
, ou seja, 10 passa depois de 2:'10'.localeCompare('2', undefined, {numeric: true, sensitivity: 'base'})
Para obter desempenho ao classificar um grande número de cadeias, o artigo diz:
fonte
Então você precisa de um tipo natural ?
Nesse caso, talvez esse script de Brian Huisman baseado no trabalho de David koelle seja o que você precisa.
Parece que a solução de Brian Huisman agora está diretamente hospedada no blog de David Koelle:
fonte
Para comparar valores, você pode usar um método de comparação
Mas, para agilizar a classificação de uma matriz, monte a matriz antes de classificá-la, para que você só precise fazer conversões em minúsculas e a expressão regular uma vez, em vez de em todas as etapas da classificação.
fonte
String.prototype.tlc()
? Esse é seu próprio código ou você o obteve de algum lugar? Se este for o caso, faça o link para a página.Se você tiver uma matriz de objetos, poderá fazer o seguinte:
Mostrar snippet de código
fonte
A biblioteca mais completa para lidar com isso a partir de 2019 parece ser de ordem natural .
Ele não apenas recebe matrizes de cadeias, mas também pode classificar pelo valor de uma determinada chave em uma matriz de objetos. Também pode identificar e ordenar automaticamente cadeias de caracteres: moedas, datas, moeda e várias outras coisas.
Surpreendentemente, também é de apenas 1,6kB quando compactado.
fonte
Imagine uma função de preenchimento de 8 dígitos que transforma:
Podemos usar as cordas acolchoadas para nos ajudar a classificar '19asd' para aparecer antes de '123asd'.
Use a expressão regular
/\d+/g
para ajudar a encontrar todos os números que precisam ser preenchidos:A seguir demonstra a classificação usando esta técnica:
Os resultados intermediários mostram o que a rotina natural_expand () faz e fornece uma compreensão de como a rotina subsequente natural_compare funcionará:
Saídas:
fonte
Com base na resposta de @Adrien Be acima e usando o código que Brian Huisman e David koelle criaram, aqui está uma classificação de protótipo modificada para uma variedade de objetos:
fonte