trie un tableau avec des entiers chaînes de type en jQuery
J'ai un tableau d'entiers de type chaîne de caractères.
var a = ['200','1','40','0','3'];
sortie
>>> var a = ['200','1','40','0','3'];
console.log(a.sort());
["0", "1", "200", "3", "40"]
Je vais aussi avoir un mélange de type tableau. par exemple,
var c = ['200','1','40','apple','orange'];
sortie
>>> var c = ['200','1','40','apple','orange']; console.log(c.sort());
["1", "200", "40", "apple", "orange"]
==================================================
Les entiers de type chaîne de caractères obtient non triés.
Comment avez-vous besoin de faire le tri? Les nombres premiers dans l'ordre numérique, puis alphas alphabétique?
Alors, de quoi avez-vous besoin?
les numéros d'abord, puis par ordre alphabétique....
Veuillez mettre à jour à la question de la sortie attendue.
Essayez
Alors, de quoi avez-vous besoin?
les numéros d'abord, puis par ordre alphabétique....
Veuillez mettre à jour à la question de la sortie attendue.
Essayez
['200','1','40','orange','apple']
et vous verrez que les chaînes sont triés, trop. Votre exemple a déjà trié les chaînes. Et "1", "200", "40"
est un bon ordre.OriginalL'auteur beebek | 2013-09-01
Vous devez vous connecter pour publier un commentaire.
Comme les autres ont dit, vous pouvez écrire votre propre fonction de comparaison:
la chose drôle est que
parseInt()
est unnecesary (même si cela rend les choses plus claires) 🙂ouais, je sais que la question a été quelque peu incertaine 😉
wow, je n'avais pas remarqué que!
OriginalL'auteur Kazuki
Ce doit être ce que vous êtes à la recherche pour
parseFloat
ne pas accepter un radix argument. Plus important encore, notez que l'utilisation de la-
opérateur de cast les chaînes de nombres (et plus vite). En d'autres termes, il suffit dereturn a-b
.Ne parvient pas à trier si il y a un autre nombre entier de type chaîne de caractères au dernier var de données = ['88','331','11','46','4445', '200', 'a', '300']; alert(data.de tri(function(a, b) { return parseFloat(a) - parseFloat(b); }) );
OriginalL'auteur Graham Walters
Vous devez écrire votre propre fonction de tri.
Vous pouvez faire cela beaucoup moins verbeux avec ternaire opérateurs au lieu de tant de si les déclarations, par exemple
return a<b ? -1 : a>b ? 1 : 0
Bon point @Youri, je vous remercie. J'ai édité ma réponse.
oui, j'ai essayé de faire le retour de détails plus facile à lire, mais vous avez raison - il est plus que nécessaire.
aussi, si les deux sont des numéros que vous pouvez simplement retourner la différence. Si un seul d'entre eux est un numéro, puis vous pouvez comparer des chaînes de caractères
OriginalL'auteur Tap
Merci à tous, bien que je ne sais pas jQuery beaucoup, mais de vous les gars exemples, j'ai résumé le code suivant qui fonctionne comme par mon exigence
à être utilisé dans firebug
+a
convertit un entier s'il le peut, sinon renvoieNaN
. employant encore de la contrainte Kazuki la réponse peut être la plus courte:arr.sort(function(a, b) { if (isNaN(a) || isNaN(b)) { return a > b ? 1 : -1; } return a - b; });
contraint à un Nombre, pas un "integer".
droite!!!!
jusqu'à présent la réponse de @soulcheck répond à mes critères....
soulcheck a fait l'objet de quelques modifications qui répond à mes critères.. Merci
OriginalL'auteur beebek
La plupart des implémentations de javascript, pour autant que je sais, fournir une fonction, vous pouvez passer de fournir votre propre tri.
Mozilla Méthode de tri
OriginalL'auteur ermagana