Wie man ein JS-Objekt von Objekten?
Ich gebaut habe, ein Objekt in PHP, verwendet die Funktionen json_encode Funktion und senden Sie es als ein JSON-string auf meinem JS script über ajax. Dann habe ich konvertiert es zurück in ein Objekt. Das problem, das ich habe ist, dass ich wollte, dass das Objekt in der Reihenfolge, in der Sie ursprünglich erstellt wurde. Bitte sehen Sie sich dieses Bild von dem, was das Objekt aussieht, wenn ich ihn in JS:
Wenn ich das Objekt erstellt hat, es wurde sortiert nach dem Feld "Kunde" in alphabetischer Reihenfolge. Der name des Kunden, beginnend mit Einer kommen würde, den ersten, B den zweiten, etc. Wie Sie sehen können, jetzt ist das erste element des Objekts als Kunde beginnend mit S. Es sieht aus wie es lief irgendwie automatisch sortiert, indem der Schlüssel von der top-level-Objekt, das eine ganze Zahl, so verstehe ich, warum dies passiert ist.
So, ich möchte zu tun ist, neu zu Sortieren, die dieses Objekt so, dass alle sub-Objekte werden sortiert nach der customer
Feld alphabetisch sortiert. Ist das möglich? Wenn ja, wie mache ich es?
Dank!
- Haben Sie Durchlaufen das Objekt zu überprüfen? Chrome Dev-Tools zeigen nicht die Objekt-Eigenschaften, die in der aktuellen iteration um. Bitte beachten Sie, dass Objekte nicht über eine definierte standard-cross-browser-iteration um, aber diese in der Regel hinsichtlich der Reihenfolge, in der die Eigenschaften wurden Hinzugefügt.
- Nein, es ist nicht möglich, die Art eines Objekts. Objekte werden immer ungeordneter.
- ja, ich iteriert über Sie, das ist, wo ich zum ersten mal das problem. bei der Verwendung einer for-Schleife, die Objekte iterieren in der Reihenfolge erscheinen Sie im Bild.
- Könnten Sie besser dran, wenn jeder Zeile ein
object
Eintrag in einerarray
; Sie könnte dann Sortieren Sie diearray
durch den Kunden-Namen. verlassen Sie sich nicht auf die iteration, um ein Objekt in JavaScript. - Ja, Ihre beste Wette ist, übersetzen Sie das Objekt zu einem array als @Mathletics vorgeschlagen.
- Nur ergänzend @Mathletics Vorschlag. Nachdem Sie Ihre array (nennen wir es
json_array
) so Sortieren Sie es durch, dies zu tun:json_array.sort(function(a, b){return a.customer > b.customer? 1: -1;});
- ja, dass ist es, dass die Werke, nach der Verwendung dieses zu konvertieren es in ein array:
data = $.map(data, function(k, v) { return [k]; });
- Wenn Sie haben die Kontrolle über das Objekt, ein array, die auf der server-Seite anstelle der Rückgabe ein Objekt, das Sie noch haben, Sie zu massieren.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es ist vermutlich der Unterschied zwischen einem JavaScript-Objekt und ein JavaScript-Array. Objekte sind mehr wie hash-Tabellen, wo die Schlüssel sind nicht sortiert in einer bestimmten Reihenfolge, in der Erwägung, dass Arrays sind linear Sammlungen von Werten.
In Ihren back-end, stellen Sie sicher, dass die Kodierung ein array, sondern als ein Objekt. Überprüfen Sie die endgültige codierte JSON, und wenn Sie Ihre Sammlung von Objekten umgeben ist, die von {} statt [] es wird codiert, wie ein Objekt statt einem array.
Können Sie laufen in ein problem, da es aussieht wie Sie versuchen, den Zugriff auf die Objekte über eine ID-Nummer, und das ist der index, den Sie möchten, dass diese Objekte zu besetzen, in der final-array, das zeigt ein weiteres problem, weil Sie wahrscheinlich nicht wollen, ein array mit 40,000 Einträgen, wenn Sie nur die Speicherung einer kleinen Menge von Werten.
Wenn Sie wollen einfach nur zum Durchlaufen der Objekte, sollten Sie sicherstellen, dass Sie die Kodierung ein array statt eines Objekts. Wenn Sie möchten, um den Zugriff auf die Objekte von spezifischen ID, Sie werden wahrscheinlich haben, um die Sortierung der Objekte auf client-Seite (D. H. Sie haben das Objekt aus der JSON-Antwort, und dann erstellen Sie ein array Sortieren und die Objekte in es hinein, so können Sie die Objekte sortiert und noch in der Lage sein, um Ihnen den Zugang von id).
Finden Sie effiziente algorithmen zur Sortierung (oder verwenden Sie das unten aus ELCas) leicht über Google.
Habe ich geändert Fabricio Matée beantworten, um flexibler zu werden und die Rückgabe des sortierten Objekt.
Dann rufen Sie die Funktion wie folgt
toLowerCase()
nur in einem Fall ist es einnumber
. beiobj.tempSortName = data[prop][attr].toLowerCase();
Hier ist eine generische iteration Funktion schiebt alle Objekte in ein array und sortiert diese nach Ihrer
customer
Eigenschaft, die in einer Kleinschreibung, dann iteriert über die sortierten array:Geige
Nur Durchlaufen Ihre Daten und Sortieren. Ich bin nicht mit den effizientesten sorter aber die Ideen gibt es.
object
in einearray
.