J'ai obtenu un tableau (voir ci-dessous pour un objet dans le tableau) que je dois trier par prénom en utilisant JavaScript. Comment puis-je le faire?
var user = {
bio: null,
email: "[email protected]",
firstname: "Anna",
id: 318,
lastAvatar: null,
lastMessage: null,
lastname: "Nickson",
nickname: "anny"
};
javascript
Jonathan Clark
la source
la source
Réponses:
Supposons que vous ayez un tableau
users
. Vous pouvez utiliserusers.sort
et passer une fonction qui prend deux arguments et les comparer (comparateur)Il devrait revenir
Dans notre cas, si deux éléments sont
a
etb
nous voulons comparera.firstname
etb.firstname
Exemple:
Ce code va fonctionner avec n'importe quel type.
Notez que dans la "vraie vie" ™, vous voulez souvent ignorer la casse, trier correctement les signes diacritiques, les symboles étranges comme ß, etc. lorsque vous comparez des chaînes, vous pouvez donc les utiliser
localeCompare
. Voir les autres réponses pour plus de clarté.la source
localeCompare
.Code le plus court possible avec ES6!
Le support de base de String.prototype.localeCompare () est universel!
la source
Quelque chose comme ça:
la source
'a'>'A' //true
'z'>'a' //true
'A'>'z' //false
'Zebra'
plus haut que la chaîne'apple'
, ce qu'elle fera si vous n'utilisez pas le.toLowerCase()
.'Z' < 'a' // true
et'z' < 'a' // false
Si les chaînes comparées contiennent des caractères unicode, vous pouvez utiliser la
localeCompare
fonction deString
classe comme suit:la source
users.sort((a, b) => a.name.localeCompare(b.name))
Joli petit ES6 one liner:
la source
Nous pouvons utiliser localeCompare mais devons également vérifier les clés pour les valeurs de falsey
Le code ci-dessous ne fonctionnera pas si une entrée manque lname.
Nous devons donc vérifier la valeur de falsey comme ci-dessous
OU
nous pouvons utiliser lodash, c'est très simple. Il détectera les valeurs renvoyées, c'est-à-dire s'il s'agit d'un nombre ou d'une chaîne et effectuera le tri en conséquence.
https://lodash.com/docs/4.17.5#sortBy
la source
underscorejs offre la très belle fonction _.sortBy:
ou vous pouvez utiliser une fonction de tri personnalisée:
la source
sortBy
les valeurs retournées sont des chaînes et effectue donc un tri alphabétique? MerciDans le cas où nous trions des noms ou quelque chose avec des caractères spéciaux, comme ñ ou áéíóú (communs en espagnol), nous pourrions utiliser les paramètres locaux ( es pour l'espagnol dans ce cas) et des options comme celle-ci:
Les options locales officielles peuvent être trouvées ici en iana , es (espagnol), de (allemand), fr (français). À propos de la base de sensibilité signifie:
la source
Fondamentalement, vous pouvez trier les tableaux avec le tri de méthode, mais si vous voulez trier les objets, vous devez passer une fonction pour trier la méthode du tableau, donc je vais vous donner un exemple en utilisant votre tableau
la source
else
être supprimé? Sinon, celareturn 0
ne sera jamais luInspiré de cette réponse,
la source
Une notation plus compacte:
la source
sign(f(a, b)) =-sign(f(b, a))
(pour a = b)a.firstname == b.firstname
doit être utilisé===
pour être completégalement pour le tri asec et desc, vous pouvez utiliser ceci: supposons que nous ayons une variable SortType qui spécifie le tri croissant ou le tri décroissant que vous souhaitez:
la source
Une fonction généralisée peut être écrite comme ci-dessous
vous pouvez passer les paramètres ci-dessous
la source
essayer
Afficher l'extrait de code
la source
[9,8,7,6,5,1,2,3].sort((a,b) => a<b ? -1 : 1)
Vous pouvez l'utiliser pour des objets
la source
en termes simples, vous pouvez utiliser cette méthode
la source
Vous pouvez utiliser la méthode du tableau intégré -
sort
. Cette méthode prend une méthode de rappel comme paramètrePoints clés à noter pour comprendre ce code.
myCustomSort
doit renvoyer +1 ou -1 pour chaque comparaison de paires d'éléments (du tableau d'entrée).toLowerCase()
/toUpperCase()
dans la méthode de rappel de tri personnalisé afin que la différence de casse n'affecte pas l'exactitude du processus de tri.J'espère que cette explication est suffisamment claire. N'hésitez pas à commenter si vous le pensez, plus d'informations sont nécessaires.
À votre santé!
la source
Poussé les meilleures réponses dans un prototype pour trier par clé.
la source
Vous pouvez utiliser quelque chose de similaire pour vous débarrasser de la casse
la source
Mon implémentation fonctionne très bien dans les anciennes versions ES:
la source
Juste pour mémoire, si vous voulez avoir une fonction de tri nommée, la syntaxe est la suivante:
Notez que ce qui suit ne fonctionne PAS:
la source