Wie funktioniert jQuery.(ein -) arbeiten mit assoziativen arrays (Objekte)?
Ich habe ein assoziatives array mit zwei Objekt im inneren. Dies wird ausgeführt durch $(myassoc).each()
, der Rückruf läuft nur einmal. Auch die callback-Parameter (index, Objekt) gibt 0 zurück und das gesamte assoziative array, beziehungsweise.
Würde man erwarten, dass jQuery.each()
, die für jedes element in dem array, gibt die richtigen Schlüssel als index und das richtige element als Objekt.
Warum ist das nicht geschehen, und kann jQuery das tun, was ich mir nach dem?
- können Sie bitte zeigen Sie den code?
$(obj).each()
funktioniert einwandfrei mit - Haben Sie versucht
$.each(myassoc, func...
? - Wenn Sie nur zwei Objekte in (2-Tasten-array), so gibt es nur zwei Iterationen. Wenn Sie wollen
each
diese beiden Objekte, die Sie zu tun haben.each
wieder für Sie - JavaScript KEINE assoziativen Arrays
- Assoziatives array ist nur ein anderes Wort für ein Schlüssel/Wert-Zuordnung, soweit ich weiß. Ich habe geben Sie "Objekte" im Titel.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich glaube, Sie suchen nach jQuery.jeder() statt .each()
versuchen Sie dies:
versuchen Sie dies:
Schlecht.
Nicht
$(associative_array).each(function () {...})
- das ist UnsinnNicht
$.each(associative_array, function() {...});
-- in einem obskuren bug(1)Zu sehen, die Fehler, versuchen diese in eine javascript-Konsole:
Ersten Beispiel werden drei Linien von Schlüssel-Wert-Paare, wie es sollte. Die zweiten Ausgänge nichts!
Die moral von der Geschichte, nicht verwenden jQuery.each() auf Objekte. (Objekte in JavaScript sind im wesentlichen die dasselbe als assoziative arrays.) Dinge, die möglicherweise funktionieren für immer, aber laufen Sie Gefahr, dass eines Tages ein Objekt geschieht mit einem Mitglied namens
length
und seinen Wert passiert, um genau zu sein0
und dann haben Sie einen Fehler aus dem nichts, dass kann sehr schwierig sein zu erklären. (Ich lasse Sie erraten, von dem schwerfälligen heft dieser Antwort, ob die mir je passiert ist.)Wie gesagt in den bug-report:
Schlage ich vor, weiter zu gehen, dass jQuery.jeder sollte sich nicht darauf verlassen, für assoziative arrays, je.
(1) Dieser "bug" kann nie behoben werden, da $.each () - historisch verwendet Duck Typing auf arrays: "Arrays und array-ähnliche Objekte mit einer Länge Eigenschaft (z.B. eine Funktion, die die Argumente Objekt) sind die iterierten von numerischen index."
Hier ist, was ich verwenden[Dank Dominik] zu Schleife durch den Eigenschaftsnamen und-Werte von Objekten, oder anders ausgedrückt, die Schlüssel und Werte eines assoziativen Arrays:
looper() ist dann ein drop-in-Ersatz für $.each()
Genau wie $.jeder():
this
ist jeder Wertfalse
(nicht nur falsy) die Schleife beendetVerwenden:
Versuchen, dass mit $.each() und Sie erhalten ein leeres Ergebnis. Weil es interpretiert, die das jeweilige Objekt als ein array-artiges Objekt mit einer Länge von null.
Das problem ist, dass die
$.each()
Funktion intern abgerufen und verwendet denlength
- Eigenschaft der übergebenen collection. Aber in einem assoziativen array , dass keine integer-Indizes dielength
scheint immer0
. Für$.each()
jetzt scheint es nichts zu Fuß durch.Den Lösungen ist einfach, ein Objekt zu verwenden, statt.