Problem mit for(i in param) Schleife

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Problem mit for(i in param) Schleife

    Hallo zusammen,
    ich habe das Javascript Objekt Array um folgende zwei Funktionen erweitert:
    Code:
    /**
     * Erweitert das Array Element um die Funktion remove(index)
     * 
     * @author Günther Bauer
     * @param {int} n
     */
    Array.prototype.remove = function(n) {
    	if(n>=0 && n<this.length) {
    		if(n<this.length) {
    			var x = -1;
    			while((++x)<this.length) {
    				if(x>=n) {
    					this[x] = this[x+1];
    				}
    			}
    		}
    		this.pop();
    	}
    };
    
    /**
     * Erweitert das Array Element um die Funktion in_array(value)
     * 
     * @author Günther Bauer
     * @param {param} value
     * @return Erfolgsmeldung
     * @type bool
     */
    Array.prototype.in_array = function(value) 
    {
    	for(var i = 0; i < this.length; i++) {
    		if(this[i] === value) {
    			return true;
    		}
    	}
    	return false;
    }
    Wenn ich nun ein Array wie
    Code:
    var param = new Array();
    param["do"] = "get";
    param["id"] = "id";
    erstellen, übernimmt er hier ebenfalls die von mir zwei implementierten Funktionen in das Array rein. Beim durchführen einer
    Code:
    for(i in param)
    Schleife wird dies Sichtbar, wenn man das gesamte Array ausgeben lässt.
    Wie kann ich dies verhindern, dass diese Funktionen in das Array mit übernommen werden und ich somit nur das von mir definierte Array erhalte?
    mfg
    Günni


    Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
    Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
    Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
    City-Tiger - Online durch die Straßen tigern...

  • #2
    Re: Problem mit for(i in param) Schleife

    Assoziative Arrays gibt es in Javascript nicht.

    Da auch ein Array ist nur ein Objekt ist, weisst du mit
    param["do"] = "get";
    seinem Attribut do den Wert "get" zu.


    Und das for-in-Schleifenkonstrukt ist nun mal dafür gedacht, über alle Attribute zu iterieren.
    Wenn du dabei bestimmte Attribute/Methoden nicht zu sehen bekommen willst - dann musst du sie ignorieren.
    (Man könnte sich z.B. über prototype noch einen Iterator basteln, der diese speziellen Attribute/Methoden - und dabei natürlich auch sich selber - ignoriert, und nur den Rest berücksichtigt.)
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Ich nehme die Prüfung nun durch die Funktion hasOwnProperty vor.
      Code:
         for (var propertyName in someObject) {
           if (someObject.hasOwnProperty(propertyName)) {
             ...
           }
         }
      mfg
      Günni


      Praxis: Jeder kann´s, aber keiner weiß wie´s geht...
      Theorie: Jeder weiß wie´s geht, aber keiner kann´s ...
      Microsoft vereint Praxis und Theorie: Nix geht und keiner weiß warum
      City-Tiger - Online durch die Straßen tigern...

      Kommentar

      Lädt...
      X