kostenloser Webspace werbefrei: lima-city


Array Extension hängt als Element an Array

lima-cityForumDie eigene HomepageHTML, CSS & Javascript

  1. Autor dieses Themas

    profilezz

    profilezz hat kostenlosen Webspace.

    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;
    }
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. m******************r

    Hallo!

    Warum das passiert kann ich jetzt leider aus dem Gedächtnis nicht sagen, aber abfragen
    kann man das mit
    hasOwnProperty(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
  4. 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ß
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!