Je recherche le moyen le plus simple de trier un tableau composé de nombres et de texte, et d'une combinaison de ceux-ci.
Par exemple
'123asd'
'19asd'
'12345asd'
'asd123'
'asd12'
se transforme en
'19asd'
'123asd'
'12345asd'
'asd12'
'asd123'
Cela va être utilisé en combinaison avec la solution à une autre question que j'ai posée ici .
La fonction de tri en elle-même fonctionne, ce dont j'ai besoin est une fonction qui peut dire que «19asd» est plus petit que «123asd».
J'écris ceci en JavaScript.
Edit: comme l' a souligné adormitu , ce que je recherche est une fonction de tri naturel
How do you do string comparison in JavaScript?
sur stackoverflow.com/questions/51165/…Réponses:
Ceci est désormais possible dans les navigateurs modernes utilisant localeCompare. En passant l'
numeric: true
option, il reconnaîtra intelligemment les nombres. Vous pouvez faire une utilisation insensible à la cassesensitivity: 'base'
. Testé dans Chrome, Firefox et IE11.Voici un exemple. Il revient
1
, ce qui signifie que 10 va après 2:'10'.localeCompare('2', undefined, {numeric: true, sensitivity: 'base'})
Pour les performances lors du tri d'un grand nombre de chaînes, l'article dit:
la source
Vous avez donc besoin d'une sorte naturelle ?
Si tel est le cas, ce scénario de Brian Huisman basé sur le travail de David Koelle serait peut-être ce dont vous avez besoin.
Il semble que la solution de Brian Huisman soit désormais directement hébergée sur le blog de David Koelle:
la source
Pour comparer les valeurs, vous pouvez utiliser une méthode de comparaison-
Mais pour accélérer le tri d'un tableau, configurez le tableau avant le tri, de sorte que vous ne devez effectuer les conversions en minuscules et l'expression régulière qu'une seule fois au lieu de chaque étape du tri.
la source
String.prototype.tlc()
? Est-ce votre propre code ou l'avez-vous obtenu de quelque part? Dans ce dernier cas, veuillez créer un lien vers la page.Si vous avez un tableau d'objets, vous pouvez faire comme ceci:
Afficher l'extrait de code
la source
La bibliothèque la plus complète pour gérer cela à partir de 2019 semble être d'ordre naturel .
Il prend non seulement des tableaux de chaînes, mais peut également trier par la valeur d'une certaine clé dans un tableau d'objets. Il peut également identifier et trier automatiquement des chaînes de: devises, dates, devises et un tas d'autres choses.
Étonnamment, il ne représente que 1,6 Ko lorsqu'il est gzippé.
la source
Imaginez une fonction de remplissage à 8 chiffres qui transforme:
Nous pouvons utiliser les chaînes remplies pour nous aider à trier «19asd» pour qu'il apparaisse avant «123asd».
Utilisez l'expression régulière
/\d+/g
pour trouver tous les nombres qui doivent être complétés:Ce qui suit illustre le tri à l'aide de cette technique:
Les résultats intermédiaires montrent ce que fait la routine natural_expand () et vous donnent une compréhension du fonctionnement de la routine natural_compare suivante:
Les sorties:
la source
En s'appuyant sur la réponse de @Adrien Be ci-dessus et en utilisant le code créé par Brian Huisman et David Koelle , voici un prototype modifié de tri pour un tableau d'objets:
la source