Thema Rückwärtsfahren Array von Objekten mit JS
Ich bin Parsen von JSON und bekommen ein array von Objekten mit javascript. Ich habe dies zu tun, dann fügen Sie ein element für jedes Objekt:
for(o in obj){ ... }
Aber ich erkannte, dass für eine bestimmte situation, in der ich wollen, gehen Sie rückwärts durch das array. So habe ich versucht, diese vor der for-Schleife:
obj = obj.reverse();
Jedoch ist dies nicht die Umkehrung der Reihenfolge der Objekte im array. Ich könnte einfach ausgedrückt eine count-variable in der for-Schleife manuell die Rückseite, aber ich bin verwirrt, warum der Rückwärtsgang scheint nicht zu funktionieren mit Objekt-arrays.
obj = obj.reverse()
ist unnötige, weil reverse
ist eine mutator-Methode. Sie können einfach tun obj.reverse()
.Nach MDN sollte es funktionieren. Beachten Sie, dass sollten Sie nicht Iteration über ein array mit
for...in
. Verwenden Sie eine normale for
Schleife, dann könnte man einfach Durchlaufen von arr.length
zu 0
als gut. Es spielt überhaupt keine Rolle, welche Daten-Typen enthalten sind, in das array. Wenn man wirklich ein Objekt und kein array, dann die umgekehrte Reihenfolge ist nicht egal (es gibt keine Reihenfolge). Bitte geben Sie den Wert obj
.InformationsquelleAutor captDaylight | 2012-03-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine solche Sache wie ein "object array" in JavaScript. Es gibt Objekte und es gibt Arrays (die, natürlich, sind auch Objekte). Objekte haben Eigenschaften und diese Eigenschaften sind nicht bestellt, die in einer definierten Art und Weise.
In anderen Worten, wenn Sie haben:
gibt es keine Garantie, dass ein
for ... in
loop-besuchen Sie die Eigenschaften in der Reihenfolge "a", "b", "c".Nun, wenn Sie habe eine array von Objekten wie:
dann ist das ein gewöhnliches array, und Sie können es rückgängig zu machen. Die
.reverse()
Methode mutiert das array, so dass Sie nicht erneut zuweisen. Wenn Sie tun ein array von Objekten (oder ein real-array der jegliche Art von Werten), dann sollten Sie nicht Verwendungfor ... in
zu Durchlaufen. Verwenden Sie einen numerischen index.Bearbeiten — es ist wies darauf hin, in ein hilfreicher Kommentar, der
.reverse()
zurückgegeben wird eine Referenz auf das array, so dass die Neuzuweisung wird nicht Schaden, nichts.Object
hat keine Methodereverse()
, wo-wie einArray
.... deshalb können Sie die Reihenfolge umkehren, weil es nicht existiert.
Aber die Neuzuweisung der array wird nicht ein problem sein...
ah OK, ich war nur um zu versuchen, in die Konsole. Die MDN-Seite nicht sagen, was der Rückgabewert ist, glaube ich nicht. (Ich werde es aktualisieren.) edit Hoppla tut er ja sagen. OK dann 🙂
nun können Sie laufen in Probleme mit
for ... in
denn es greift alle die Eigenschaften des Objekts, nicht nur die numerisch indizierten Einsen. Plus, natürlich, Sie ' re garantiert, um zu sehen, die numerisch indizierten Parameter in der richtigen Reihenfolge, wenn Sie explizit die Definition der "richtigen" Reihenfolge, mit der Art, wie Sie die Inkrement-oder Dekrement-Schleife.InformationsquelleAutor Pointy
Das ist, weil die
for (o in obj)
nicht Durchlaufen Sie das array als ein array, sondern als Objekt. Es iteriert die Eigenschaften in das Objekt, zu dem auch die Mitglieder in das array, aber Sie iterierbar sind in der Reihenfolge der Namen, nicht in der Reihenfolge, dass Sie Sie in das array.Außerdem sind Sie mit der
reverse
Methode falsch. Es kehrt die Reihe in Ort, also nicht mit der return-Wert:for ... in
Schleife geht in Namen um, ist das eine Aussage, wie sich einige/die meisten/alle Browser Verhalten? Mein Eindruck ist, dass die spec explizit nicht definieren die Reihenfolge ...Sie haben Recht, es nicht definieren. Browser Verhalten sich unterschiedlich. Einige sind der Iteration über die Eigenschaften der in der insertion order (ich glaube Firefox hat), während andere (ich denke, Chrome) erste Iteration über die numerischen Eigenschaften und dann alphanumerischen lieben... oder so ähnlich. Sie können nicht auf jeden Fall verlassen sich auf die Reihenfolge, in unterschiedlichen Browsern.
InformationsquelleAutor Guffa