Array Extension hängt als Element an Array
lima-city → Forum → Die eigene Homepage → HTML, CSS & Javascript
abfragen
array
art
code
eigenschaft
element
funktion
http
lade
letzte element
nachricht
objekt
problem
sagen
schleife
string
teil
tun
url
verhindern
-
Ich habe ein sehr merkwürdiges Problem.
Und zwar habe ich die Array-Funktionen erweitert mit:
Array.prototype.in_Array = function(needle){ for(i in this){ if(this[i] == needle){ return true; } } return false; }
nun lade ich in einem anderen Teil meines Scripts, einen JSON String via AJAX und wandle diesen mit der jQuery-Funktion $.parseJSON() in ein Object um.
Der JSON-String sieht wie folgt aus:
{"lastID":"4","Messages":[["User1","Nachricht 1"],["User2","Nachricht 2"]]}
Wenn ich nun das Array in callback.Messages in einer for-in Schleife durchlaufen lasse, hängt als letztes(leider überflüssiges Element) die komplette in_Array Funktion dran.
Die for-in Schleife:
callback = $.parseJSON( callback ); for(i in callback["Messages"]){ alert( callback["Messages"][i] ); }
Das letzte Element in callback["Messages"] ist nun kein Array - wie die anderen Einträge - sondern eben:
function (needle) { for (i in this) { if (this[i] == needle) { return true; } } return false; }
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Hallo!
Warum das passiert kann ich jetzt leider aus dem Gedächtnis nicht sagen, aber abfragen
kann man das mithasOwnProperty(property)
https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/HasOwnProperty
deine for-Schleife sollte demnach so ausschaun:
for (i in callback["Messages"]) if (callback["Messages"].hasOwnProperty(i) alert(callback["Messages"][i] );
Dass die Funktion angehängt wird kann man afaik nicht verhindern.
LG -
Hallo,
also mit jquery oder json hat das gar nichts zu tun.
Es liegt an der Art, wie du die Elemente des Arrays ausliest. For .. in ... ist dafür eigentlich nicht gedacht, wie du z.B. hier lesen kannst. Eigentich ist for ... in .. dafür gedacht die Eigenschaften eines Objektes auszulesen, wobei bestimmte Eigenschaften als nicht aufzählbar gekennzeichnet sind. Beim Array sind das length und protoype. Offenbar bricht die Aufzählung nach den Array-Elementen ab, da dann length oder prototype erreicht wird. Nun hast du aber eine neue Eigenschaft (funktion) definiert. Diese ist für for ... in... lesbar und wird auch angezeigt.
Benutze also for (var i = 0; i < array.length; i++) und alles ist gut.
Gruß -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage