Ich habe die folgenden Objekte mit AJAX und habe sie in einem Array gespeichert:
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"
}
];
Wie erstelle ich eine Funktion, um die Objekte nach der price
Eigenschaft in aufsteigender oder absteigender Reihenfolge nur mit JavaScript zu sortieren ?
javascript
arrays
sorting
TomHankers
quelle
quelle
Antworten:
Sortieren Sie die Häuser nach Preis in aufsteigender Reihenfolge:
Oder nach der ES6-Version:
Einige Dokumentationen finden Sie hier .
quelle
string1.localeCompare(string2)
für String-Vergleich verwendenlocaleCompare()
die Groß- und Kleinschreibung nicht berücksichtigt wird . Wenn Sie zwischen Groß- und Kleinschreibung unterscheiden möchten, können Sie verwenden(string1 > string2) - (string1 < string2)
. Die Booleschen Werte werden zur Berechnung der Differenz auf die Ganzzahlen 0 und 1 gezwungen.localeCompare()
Dokumentation , dass Sie explizit angeben können, ob Sie Groß- und Kleinschreibung, numerische Sortierung und andere Optionen wünschen.Hier ist eine flexiblere Version, mit der Sie wiederverwendbare Sortierfunktionen erstellen und nach beliebigen Feldern sortieren können.
quelle
sort_by
wird in O (1) ausgeführt und gibt eine Funktion zurück, die von der integrierten Sortierung (O (N log N)) zum Vergleichen von Elementen in einer Liste verwendet wird. Die Gesamtkomplexität ist O (n log n) * O (1), was sich auf O (n log n) reduziert, oder dasselbe wie eine schnelle Sortierung.var key = primer ? function (x) { return primer(x[field]); } : function (x) { return x[field]; }
[1,-1][+!!reverse]
Blicke abkühlen, dann ist es eine schreckliche Sache zu tun. Wenn ein Benutzer Ihre Methode nicht richtig aufrufen kann, bestrafen Sie ihn und versuchen Sie nicht, sie irgendwie zu verstehen, egal was passiert.Um es zu sortieren, müssen Sie eine Komparatorfunktion mit zwei Argumenten erstellen. Rufen Sie dann die Sortierfunktion mit dieser Komparatorfunktion wie folgt auf:
Wenn Sie aufsteigend sortieren möchten, wechseln Sie die Ausdrücke auf jeder Seite des Minuszeichens.
quelle
für die Sortierung von Zeichenfolgen, falls jemand sie benötigt,
quelle
Wenn Sie einen ES6- kompatiblen Browser haben, können Sie Folgendes verwenden:
Der Unterschied zwischen aufsteigender und absteigender Sortierreihenfolge ist das Vorzeichen des von Ihrer Vergleichsfunktion zurückgegebenen Werts:
Hier ist ein Arbeitscode-Snippet:
quelle
Du willst es in Javascript sortieren, oder? Was Sie wollen, ist die
sort()
Funktion . In diesem Fall müssen Sie eine Komparatorfunktion schreiben und an übergebensort()
, also ungefähr so:Ihr Komparator verwendet jeweils einen der verschachtelten Hashes im Array und entscheidet anhand des Felds "Preis", welcher höher ist.
quelle
Ich empfehle GitHub: Array sortBy - eine beste Implementierung einer
sortBy
Methode, die die Schwartzsche Transformation verwendetAber jetzt werden wir diesen Ansatz versuchen. Gist: sortBy-old.js .
Erstellen wir eine Methode zum Sortieren von Arrays, mit denen Objekte nach einer Eigenschaft angeordnet werden können.
Sortierfunktion erstellen
Unsortierte Daten einstellen
Es benutzen
Ordnen Sie das Array nach
"date"
as anString
Wenn Sie die Groß- und Kleinschreibung ignorieren möchten, legen Sie den
parser
Rückruf fest:Wenn Sie das
"date"
Feld alsDate
Typ konvertieren möchten :Hier können Sie mit dem Code spielen: jsbin.com/lesebi
Dank @Ozesh durch sein Feedback wurde das Problem im Zusammenhang mit Eigenschaften mit falschen Werten behoben.
quelle
var checkNaN = function (value) { return Number.isNaN(Number(value)) ? 0 : value; }
funktioniert . Hier ist eine schnelle Lösung dafür: gefolgt von: return function (array, 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)); });Verwenden Sie lodash.sortBy (Anweisungen mit commonjs, Sie können auch einfach das Skript-Include-Tag für die CDN oben in Ihr HTML einfügen)
Absteigende Reihenfolge
Aufsteigende Reihenfolge
quelle
const sortBy = require('lodash/sortBy'); let calendars = sortBy(calendarListResponse.items, cal => cal.summary);
import { orderBy } from 'lodash'; ... ... return orderBy ( rows, 'fieldName' ).reverse();
Dies hätte durch eine einfache Sortierfunktion mit einem Zeilenwert von () erreicht werden können. Führen Sie das folgende Code-Snippet aus, um die Demo zu sehen.
quelle
Ich bin etwas spät dran für die Party, aber unten ist meine Logik zum Sortieren.
quelle
Obwohl mir bekannt ist, dass das OP eine Reihe von Zahlen sortieren wollte, wurde diese Frage als Antwort auf ähnliche Fragen zu Zeichenfolgen markiert. In diesem Zusammenhang wird in den obigen Antworten nicht berücksichtigt, ob ein Textarray sortiert werden soll, bei dem die Groß- und Kleinschreibung wichtig ist. Die meisten Antworten nehmen die Zeichenfolgenwerte und konvertieren sie in Groß- / Kleinbuchstaben und sortieren sie dann auf die eine oder andere Weise. Die Anforderungen, an die ich mich halte, sind einfach:
Was ich erwarte, ist
[ A, a, B, b, C, c ]
, dass die obigen Antworten zurückkehrenA, B, C, a, b, c
. Ich habe mich tatsächlich länger am Kopf gekratzt, als ich wollte (weshalb ich dies in der Hoffnung poste, dass es mindestens einer anderen Person helfen wird). Während zwei Benutzer dielocaleCompare
Funktion in den Kommentaren für die markierte Antwort erwähnen , habe ich das erst gesehen, nachdem ich beim Durchsuchen auf die Funktion gestoßen bin. Nachdem ich die Dokumentation zu String.prototype.localeCompare () gelesen hatte, konnte ich Folgendes finden :Dies weist die Funktion an, Großbuchstaben vor Kleinbuchstaben zu sortieren. Der zweite Parameter in der
localeCompare
Funktion besteht darin, das Gebietsschema zu definieren. Wenn Sie es jedoch verlassenundefined
, wird das Gebietsschema automatisch für Sie ermittelt.Dies funktioniert auch beim Sortieren eines Arrays von Objekten:
quelle
Sie können die JavaScript-
sort
Methode mit einer Rückruffunktion verwenden:quelle
Hier ist ein Höhepunkt aller obigen Antworten.
Geigenvalidierung: http://jsfiddle.net/bobberino/4qqk3/
quelle
Zum Sortieren eines Arrays müssen Sie eine Komparatorfunktion definieren. Diese Funktion unterscheidet sich immer von Ihrem gewünschten Sortiermuster oder Ihrer gewünschten Reihenfolge (dh aufsteigend oder absteigend).
Erstellen Sie einige Funktionen, die ein Array aufsteigend oder absteigend sortieren und Objekt-, Zeichenfolgen- oder numerische Werte enthalten.
Zahlen sortieren (alphabetisch und aufsteigend):
Zahlen sortieren (alphabetisch und absteigend):
Nummern sortieren (numerisch und aufsteigend):
Nummern sortieren (numerisch und absteigend):
Verwenden Sie wie oben beschrieben die Methoden sorterPriceAsc und sorterPriceDes für Ihr Array mit dem gewünschten Schlüssel.
quelle
Ich habe auch mit einer Art Bewertung und mehreren Feldern gearbeitet:
Ergebnis
quelle
Diese Prototypfunktion ist zwar ein wenig übertrieben, wenn nur ein einzelnes Array sortiert wird, ermöglicht jedoch das Sortieren von Javascript-Arrays nach beliebigen Schlüsseln in aufsteigender oder absteigender Reihenfolge, einschließlich verschachtelter Schlüssel , mithilfe der
dot
Syntax.Verwendungszweck:
Sortieren nach verschachtelten Eigenschaften mit Punktsyntax oder Array-Syntax:
Sortieren nach mehreren Schlüsseln:
Sie können das Repo teilen: https://github.com/eneko/Array.sortBy
quelle
sortBy
prägnanten Syntax. Einfach zu verwenden - auch bei verschachtelten Feldern - bei gleichzeitig hervorragender Lesbarkeit des Codes. Vielen Dank!Mit ECMAScript 6 kann die Antwort von StoBor noch präziser erfolgen:
quelle
Absteigende Reihenfolge des Preises:
Aufsteigende Preisreihenfolge:
quelle
Wenn Sie Underscore.js verwenden , versuchen Sie sortBy:
quelle
Hier ist eine leicht modifizierte Version der eleganten Implementierung aus dem Buch "JavaScript: The Good Parts".
HINWEIS : Diese Version von
by
ist stabil . Die Reihenfolge der ersten Sortierung bleibt erhalten, während die nächste verkettete Sortierung ausgeführt wird.Ich habe
isAscending
Parameter hinzugefügt . Konvertierte es auch inES6
Standards und "neuere" gute Teile, wie vom Autor empfohlen.Sie können sowohl aufsteigend als auch absteigend sortieren und die Kette nach mehreren Eigenschaften sortieren.
quelle
{"first":"Curly","last":"Howard", "property" : {"id" : "1"}}
Array-Typ nach ID sortieren ?by
mit name = "property", nestedName = "id"Nur für ein normales Array von Elementwerten:
Für eine Reihe von Objekten:
quelle
Erstellen Sie eine Funktion und sortieren Sie sie basierend auf der Eingabe mit dem folgenden Code
quelle
Sie können string1.localeCompare (string2) für den Stringvergleich verwenden
Beachten Sie, dass
localCompare
dies bei sensiblen Fällen der Fall istquelle
Zum Sortieren nach mehreren Array-Objektfeldern. Geben Sie Ihren Feldnamen in das
arrprop
Array ein["a","b","c"]
und übergeben Sie den zweiten Parameter derarrsource
tatsächlichen Quelle, die wir sortieren möchten.quelle
Sie benötigen zwei Funktionen
Dann können Sie dies auf jede Objekteigenschaft anwenden:
quelle
Ich habe kürzlich eine universelle Funktion geschrieben, um dies für Sie zu verwalten, wenn Sie es verwenden möchten.
quelle
quelle
Hallo, nachdem ich diesen Artikel gelesen habe, habe ich einen sortComparator für meine Bedürfnisse erstellt, mit der Funktionalität, mehr als ein json-Attribut zu vergleichen, und ich möchte ihn mit Ihnen teilen.
Diese Lösung vergleicht nur Zeichenfolgen in aufsteigender Reihenfolge, aber die Lösung kann für jedes Attribut einfach erweitert werden, um Folgendes zu unterstützen: umgekehrte Reihenfolge, andere Datentypen, Gebietsschema, Casting usw.
und das Ergebnis ist
und eine andere Art
mit Ergebnis
quelle
Ein einfacher Code:
quelle
http://yazilimsozluk.com/sort-array-in-javascript-by-asc-or-desc
quelle