J'ai les objets suivants en utilisant AJAX et les ai stockés dans un tableau:
var homes = [
{
"h_id": "3",
"city": "Dallas",
"state": "TX",
"zip": "75201",
"price": "162500"
}, {
"h_id": "4",
"city": "Bevery Hills",
"state": "CA",
"zip": "90210",
"price": "319250"
}, {
"h_id": "5",
"city": "New York",
"state": "NY",
"zip": "00010",
"price": "962500"
}
];
Comment créer une fonction pour trier les objets par la price
propriété dans l' ordre croissant ou décroissant en utilisant uniquement JavaScript?
javascript
arrays
sorting
TomHankers
la source
la source
Réponses:
Trier les maisons par prix en ordre croissant:
Ou après la version ES6:
Une documentation peut être trouvée ici .
la source
string1.localeCompare(string2)
pour la comparaison des chaîneslocaleCompare()
casse est insensible . Si vous souhaitez respecter la casse, vous pouvez utiliser(string1 > string2) - (string1 < string2)
. Les valeurs booléennes sont contraintes à un entier 0 et 1 pour calculer la différence.localeCompare()
documentation montre que vous pouvez indiquer explicitement si vous souhaitez respecter la casse, le tri numérique et d'autres options.Voici une version plus flexible, qui vous permet de créer des fonctions de tri réutilisables et de trier par n'importe quel champ.
la source
sort_by
s'exécute dans O (1) et renvoie une fonction utilisée par le tri intégré (O (N log N)) pour comparer les éléments d'une liste. La complexité totale est O (n log n) * O (1) qui se réduit à O (n log n), ou identique à un tri rapide.var key = primer ? function (x) { return primer(x[field]); } : function (x) { return x[field]; }
[1,-1][+!!reverse]
ça a l'air cool, c'est une chose horrible à faire. Si un utilisateur ne peut pas appeler votre méthode correctement, punissez-le, n'essayez pas de lui donner un sens, quoi qu'il arrive.Pour le trier, vous devez créer une fonction de comparaison prenant deux arguments. Appelez ensuite la fonction de tri avec cette fonction de comparaison comme suit:
Si vous souhaitez trier par ordre croissant, changez les expressions de chaque côté du signe moins.
la source
pour le tri des chaînes au cas où quelqu'un en aurait besoin,
la source
Si vous avez un navigateur compatible ES6, vous pouvez utiliser:
La différence entre l'ordre de tri croissant et décroissant est le signe de la valeur renvoyée par votre fonction de comparaison:
Voici un extrait de code fonctionnel:
la source
Vous voulez le trier en Javascript, non? Ce que vous voulez, c'est la
sort()
fonction . Dans ce cas, vous devez écrire une fonction de comparaison et la transmettre àsort()
, donc quelque chose comme ceci:Votre comparateur prend un de chacun des hachages imbriqués à l'intérieur du tableau et décide lequel est le plus élevé en vérifiant le champ "prix".
la source
Je recommande GitHub: Array sortBy - une meilleure implémentation de
sortBy
méthode qui utilise la transformation SchwartzianMais pour l'instant nous allons essayer cette approche Gist: sortBy-old.js .
Créons une méthode pour trier les tableaux pouvant arranger les objets selon une propriété.
Création de la fonction de tri
Définition de données non triées
En l'utilisant
Organiser le tableau, par
"date"
asString
Si vous souhaitez ignorer la casse, définissez le
parser
rappel:Si vous souhaitez convertir le
"date"
champ enDate
type:Ici, vous pouvez jouer avec le code: jsbin.com/lesebi
Grâce à @Ozesh par ses commentaires, le problème lié aux propriétés avec des valeurs de falsification a été corrigé.
la source
var checkNaN = function (value) { return Number.isNaN(Number(value)) ? 0 : value; }
suivi de: fonction de retour (tableau, o) { .... a = _getItem.call (o, a); a = checkNaN (a); b = _getItem.call (o, b); b = checkNaN (b); return o.desc * (a <b? -1: + (a> b)); });Utilisez lodash.sortBy , (instructions utilisant commonjs, vous pouvez aussi simplement mettre le script include-tag pour le cdn en haut de votre html)
Ordre décroissant
Ordre croissant
la source
const sortBy = require('lodash/sortBy'); let calendars = sortBy(calendarListResponse.items, cal => cal.summary);
import { orderBy } from 'lodash'; ... ... return orderBy ( rows, 'fieldName' ).reverse();
Cela aurait pu être réalisé grâce à une simple fonction de tri valueof () d' une ligne . Exécutez l'extrait de code ci-dessous pour voir la démo.
la source
Je suis un peu en retard pour la fête mais voici ma logique de tri.
la source
Bien que je sache que l'OP voulait trier un tableau de nombres, cette question a été marquée comme la réponse à des questions similaires concernant les chaînes. À ce fait, les réponses ci-dessus ne considèrent pas le tri d'un tableau de texte où la casse est importante. La plupart des réponses prennent les valeurs de chaîne et les convertissent en majuscules / minuscules, puis trient d'une manière ou d'une autre. Les exigences auxquelles j'adhère sont simples:
Ce que j'attends, c'est
[ A, a, B, b, C, c ]
que les réponses ci-dessus reviennentA, B, C, a, b, c
. En fait, je me suis gratté la tête plus longtemps que je ne le souhaitais (c'est pourquoi je poste ceci dans l'espoir que cela aidera au moins une autre personne). Alors que deux utilisateurs mentionnent lalocaleCompare
fonction dans les commentaires pour la réponse marquée, je ne l'ai vu qu'après être tombé sur la fonction en cherchant autour. Après avoir lu la documentation String.prototype.localeCompare (), j'ai pu trouver ceci:Cela indique à la fonction de trier les valeurs majuscules avant les valeurs minuscules. Le deuxième paramètre de la
localeCompare
fonction est de définir les paramètres régionaux, mais si vous le laissez,undefined
il détermine automatiquement les paramètres régionaux pour vous.Cela fonctionne également pour le tri d'un tableau d'objets:
la source
Vous pouvez utiliser la
sort
méthode JavaScript avec une fonction de rappel:la source
Voici l'aboutissement de toutes les réponses ci-dessus.
Validation du violon: http://jsfiddle.net/bobberino/4qqk3/
la source
Pour trier un tableau, vous devez définir une fonction de comparaison. Cette fonction sera toujours différente selon le modèle ou l'ordre de tri souhaité (c'est-à-dire croissant ou décroissant).
Laissez créer certaines fonctions qui trient un tableau croissant ou décroissant et qui contiennent un objet ou une chaîne ou des valeurs numériques.
Trier les nombres (par ordre alphabétique et croissant):
Trier les nombres (par ordre alphabétique et décroissant):
Trier les nombres (numériquement et croissant):
Trier les nombres (numériquement et décroissant):
Comme ci-dessus, utilisez la méthode sorterPriceAsc et sorterPriceDes avec votre tableau avec la clé souhaitée.
la source
J'ai également travaillé avec une sorte de classement et un tri sur plusieurs champs:
Résultat
la source
Bien que ce soit un peu exagéré de simplement trier un seul tableau, cette fonction prototype permet de trier les tableaux Javascript par n'importe quelle clé, dans l'ordre croissant ou décroissant, y compris les clés imbriquées , en utilisant la
dot
syntaxe.Usage:
Tri par propriétés imbriquées avec syntaxe à points ou syntaxe de tableau:
Tri par plusieurs clés:
Vous pouvez bifurquer le dépôt: https://github.com/eneko/Array.sortBy
la source
sortBy
syntaxe concise. Simple à utiliser - même avec des champs imbriqués - tout en conservant une excellente lisibilité du code. Je vous remercie!Avec ECMAScript 6, la réponse de StoBor peut être encore plus concise:
la source
Ordre de prix décroissant:
Ordre de prix croissant:
la source
Si vous utilisez Underscore.js , essayez sortBy:
la source
Voici une version légèrement modifiée de l'implémentation élégante du livre "JavaScript: The Good Parts".
REMARQUE : cette version de
by
est stable . Il conserve l'ordre du premier tri lors de l'exécution du tri chaîné suivant.Je lui ai ajouté un
isAscending
paramètre. Il a également été converti auxES6
normes et aux pièces «plus récentes» recommandées par l'auteur.Vous pouvez trier par ordre croissant ou décroissant et par chaîne en fonction de plusieurs propriétés.
la source
{"first":"Curly","last":"Howard", "property" : {"id" : "1"}}
type de tableau par id?by
avec name = "property", nestedName = "id"Pour un tableau normal de valeurs d'éléments uniquement:
Pour un tableau d'objets:
la source
Créer une fonction et trier en fonction de l'entrée en utilisant le code ci-dessous
la source
Vous pouvez utiliser string1.localeCompare (string2) pour la comparaison de chaînes
Notez que
localCompare
c'est le cas dans sensiblela source
Pour trier sur plusieurs champs d'objets de tableau. Entrez votre nom de champ dans un
arrprop
tableau comme["a","b","c"]
puis passez dans le deuxième paramètrearrsource
source réelle que nous voulons trier.la source
Vous aurez besoin de deux fonctions
Ensuite, vous pouvez l'appliquer à n'importe quelle propriété d'objet:
la source
J'ai récemment écrit une fonction universelle pour gérer cela pour vous si vous souhaitez l'utiliser.
la source
la source
Salut après avoir lu cet article, j'ai fait un sortComparator pour mes besoins, avec la fonctionnalité pour comparer plus d'un attribut json, et je veux le partager avec vous.
Cette solution compare uniquement les chaînes dans l'ordre croissant, mais la solution peut être facilement étendue pour chaque attribut à prendre en charge: l'ordre inverse, d'autres types de données, l'utilisation des paramètres régionaux, la conversion, etc.
et le résultat est
et une autre sorte
avec résultat
la source
Un code simple:
la source
http://yazilimsozluk.com/sort-array-in-javascript-by-asc-or-desc
la source