Alexander Kiel: Array-Steuerung

Hi Forum,

Ich möschte ein Array in JS während der Laufzeit in der Größe ändern. D.h. ich muß Elemente anhängen und wieder löschen. In Netscape ab 4.0 geht dies mit pop() und push() wunderbar.

Meine Frage:
Wie mache ich es im IE?

Danke im Vorraus

ALEX

  1. Hi Forum,

    Ich möschte ein Array in JS während der Laufzeit in der Größe ändern. D.h. ich muß Elemente anhängen und wieder löschen. In Netscape ab 4.0 geht dies mit pop() und push() wunderbar.

    Meine Frage:
    Wie mache ich es im IE?

    Danke im Vorraus

    ALEX

    Array.prototype.numberOf = entriesOf
    Array.prototype.remove = kill
    Array.prototype.removeNr = killn
    Array.prototype.indiOf = posi

    function not(bol) {
    bol = (bol) ? false : true
    return bol
    }

    function entriesOf(what) {
    var count = 0;
    for (me = 0 ; me < this.length ; me ++ ) {
    if (this[me] == what ) {count++};
    }
    return count;
    }
    function posi(named) {
    var count = -1;
    var me =0
    while (me < this.length && count == -1 ) {
    if (this[me] == named ) {count = me};
    me ++
    }
    return count;
    }

    function kill(named) {
    var i = 0
    var z = new Array()
    while ( i< this.length ) {
    if (this[i] != named) {
                    z = z.concat(this[i]) }
    i++
    }

    return z
    }

    function killn(named) {
    var i = 0
    var z = new Array()
    while ( i< this.length ) {
    if (i != named) {      
                    z = z.concat(this[i]) }
    i++
    }

    return z
    }

    Die dinger hatte ich mir mal für ein ähnliches problem geschrieben (no pop() ) bzw wohl genau das selbige.

    jede deiner Arrays die du nach dem prototype erstellst kann dan etwas mehr.

    z.B.:

    x = new Array(20)
    x[5] = "hallo"

    x.indiOf("hallo") liefert 5

    x = x.remove("Hallo") entfernt Hallo, die reien folge wird nicht geändert un die neue array ist um eins kürzer

    x = x.removeNr(5) selbiges nur über den Indice.

    So und morgen schreiben wir die Funktionen so um das wir mehrere Parameter übergeben können :)

    Timo

    1. Array.prototype.numberOf = entriesOf
      Array.prototype.remove = kill
      Array.prototype.removeNr = killn
      Array.prototype.indiOf = posi

      Moment da is ja noch mehr...

      x.numberOf wuerde die anzahl der Hallo's zurück liefern.

      und remove entfernt alle Hallos.

      Timo

    2. Hi Timo

      Über die Prototype-Eigenschaft habe ich in der Core-Doc schon etwas gelesen, jedoch nicht richtig verstanden.

      Darum 2 Verständnisfragen:

      • Kann man mit klasse.prototype.methode eine bestehende Methode einer bestehenden Klasse mit einer eigenen Methode überdecken ?

      • Ist über diesen Weg (oder einen anderen) auch ein Vererbung von Methoden und Eigenschaften auf selbstdefinierte Child-Klassen möglich ?

      Danke für die Auskünfte.

      Grüsse

      Tom

      1. oha...

        jetzt hast du mich aber auf nem kalten fuss erwischt das müsste ich selber nach schauen. aber da geht erstaunlich viel. der macker schlecht hin ist dan godmann von devEdge Netscape. Ich habe den Artikel aber auch auf meiner hompage.
        http://www.ki.tng.de/~timob/jsobj/index2.htm

        ansonsten kann ich dir nur die devEdge seiten von Netscape empfehlen. da steht sehr viel zum dem thema. bei selfaktuell steht auch noch ein sehr guter link zum thema prototypes (bei den links).

        achja das lustigste ist das funzt alles auch mit dem ie :)

        mfg Timo

        1. http://www.ki.tng.de/~timob/jsobj/index2.htm

          Nach grobem Überfliegen scheint fast alles möglich zu sein. Neue Klassen, Vererbungen, Methoden überdecken, ...).

          Danke für den Tip :-)

          Grüsse

          Tom

    3. Array.prototype.numberOf = entriesOf
      Array.prototype.remove = kill
      Array.prototype.removeNr = killn
      Array.prototype.indiOf = posi

      Bist Du sicher, dass der MSIE 4 mit Vererbung umgehen kann. Ich habs nicht asuprobiert, will es aber mal bezweifeln? Weisst Du es genau? Ansonsten ginge es ja auch per Hand, ohne das Objekt zu erweitern.

      Viele Gruesse, Thomas Hieck

      1. Bist Du sicher, dass der MSIE 4 mit Vererbung umgehen kann. Ich habs nicht asuprobiert, will es aber mal bezweifeln? Weisst Du es genau? Ansonsten ginge es ja auch per Hand, ohne das Objekt zu erweitern.

        Viele Gruesse, Thomas Hieck

        Ja. Ich arbeite hauptsächlich mit dem IE. Es funzt wunderbar. Der ganze abgefahrene kram läuft prima. Mit IE und NS. In allen versionen. Sonst hätte ich das Script wohl kaum auf diese Frage hin geposted.

        Die geschichte mit "per Hand" hat vorallendingen bei grossen arrays einen nachteil: Das this/prototype bezieht sich auf das object mit dem man arbeitet. wenn ich jedoch z.b. eine array als parameter an eine funktion weitergebe wird sie kopiert. das atens dauert und btens braucht mehr speicher. allerdings könnte man das umgehen in dem man mit globalen variablen arbeitet, was jedoch nicht immer praktisch ist wenn man mehrere arrays hat.

        Timo