LanX²: "Herrje" Cheatah

Beitrag lesen

Hallo,

Als globale Funktion ist das nur Handwerk
while ( iterOwn(obj,key) ) { BLOCK }

Eigenschaften kann man mit for-in durchlaufen, aber eine for-in-Schleife nicht nach einem Durchlauf abbrechen, um beim nächsten Durchlauf an dieser Stelle weiterzumachen. Das kann man natürlich, wenn man irgendwo die letzte Property speichert, nur wo will man sie sinnvollerweise speichern? Außerdem, wie setzt die iter-Funktion die lokale Variable? Es ginge höchstens while (wert = iter(obj)) oder so etwas.

Wie gesagt, die Laufvariable ist Träger der Info, muss dafür aber vorweg als Objekt initialisiert werden.

Das wird vielleicht an etwas Code klarer:

<html><body>
<h3> nextOwn v0.2 </h3>
<pre>

<script>
//~~~javascript

function echo(str) {
  document.writeln(str);
}

function keys (obj) {
  a=new Array();
  for (key in obj)
     if(obj.hasOwnProperty(key)) {
        a.push(key);
     };
  return a;
}

function nextOwn( obj,key) {
  if (! key.hash || key.hash != obj ) {
    /* init /
    key.hash=obj;
    key.array=keys(obj);
    key.toString=function () {
      return this.array[this.idx]
    }
    key.key="";
    key.value="";
    key.idx=0;
  } else {
    /
next */
    key.idx++;
  }

with (key) {
    if ( idx<array.length ) {
      key=array[idx];
      value=hash[key];
      return true;
    }
    else {
      delete hash ;
      return false;
    }
  }
}

/*
 *    Test
 */

var hash={a:"A",b:"B",c:"C",d:"D"};
var hash2={c:"C",d:"D"};

var j={}; // Laufvariable initialisieren

while( nextOwn( hash, j ) ){
  echo( j +":"+hash[j] );
  echo( j.idx+" > "+j.key +":"+ j.value +" ["+j.array+"]");
 };

echo("<hr>")

while( nextOwn( hash, j ) ){
  echo( j +":"+hash[j] );
  echo( j.idx+" > "+j.key +":"+ j.value +" ["+j.array+"]");
 };

echo("<hr>")

while( nextOwn(hash2, j) ){
  echo( j +":"+hash[j] );
  echo( j.idx+" > "+j.key +":"+ j.value +" ["+j.array+"]");
 };

//

  
</script>  
</pre>  
</body></html>  
  
Zufrieden bin ich nicht, aber bevor sich die Diskussion länger hinzieht mal diese Approximation. Ein key={} vorm while ist IMHO immernoch die eleganteste der bisherigen Lösungen.  
  
Eine Alternative wäre, wie auch bereits gesagt, bei jeder Schleife einen eindeutiges "Label" als String zu übergeben. (analog zu den break/continue Labels) um die Schleife eindeutig auszuzeichnen.  
  
while ( key=nextOwn(hash,"label") ) {}  
  
Aber dann erscheint mir die erste Lösung mit key={} vorweg noch angenehmer!  
  
  

> > Gegenfrage weiter unten sprichst du glaube ich davon den Object Konstruktor zu verändern, könntest du das für uns präzisieren?  
>   
> function Object () {}  
  
Ja klar, so weit waren wir auch schon, aber welchen Vorteil es bringt, um .begetObject zu realisieren hast du nicht erklärt. Ich sehe keinen.  
  
So long  
  LanX
0 139

was bewirkt {}

Ric
  • javascript
  1. 0
    Don P
  2. 0
    KurtZ
    1. 0
      Don P
      1. 0
        KurtZ
        1. 0
          Don P
          1. 0
            KurtZ
            1. 0
              Don P
              1. 0
                KurtZ
                1. 0
                  Cheatah
                  1. 0
                    KurtZ
                    1. 0
                      Don P
                      1. 0
                        KurtZ
                        1. 0
                          Siechfred
                    2. 0
                      Cheatah
        2. 0
          Don P
          1. 0
            KurtZ
            1. 0
              Don P
              1. 0
                KurtZ
    2. 0
      Cheatah
      1. 0
        KurtZ
        1. 0
          Siechfred
          1. 0
            KurtZ
            1. 0
              Cheatah
              1. 0
                KurtZ
                1. 1
                  Siechfred
                  1. 0
                    KurtZ
                    1. 0
                      Siechfred
                      1. 0
                        KurtZ
                        1. 0
                          Don P
                      2. 0
                        Siechfred
                      3. 2
                        Daniel Thoma
                        1. 0
                          KurtZ
                        2. 0
                          Siechfred
                          1. 0
                            Daniel Thoma
                            1. 0
                              Struppi
      2. 0

        "Herrje" Cheatah

        KurtZ
        1. 0
          Don P
          1. 0
            KurtZ
            1. 1
              Don P
              1. 0
                KurtZ
                1. 0
                  Don P
                  1. 0
                    KurtZ
        2. 0
          Siechfred
          1. 0
            KurtZ
            1. 0
              KurtZ
              1. 0
                Christoph
                1. 0
                  KurtZ
                  1. 0
                    Christoph
                    1. 0
                      LanX
                      1. 0
                        LanX
                        1. 0
                          Don P
                          1. 0
                            KurtZ
                            1. 0
                              Don P
                      2. 0
                        molily
                        1. 0
                          Christoph
                          1. 0
                            KurtZ
                            1. 0
                              Struppi
                            2. 0
                              Struppi
                            3. 0
                              Christoph
                              1. 0
                                Don P
                              2. 0
                                molily
                                1. 0
                                  molily
                              3. 0

                                "Herrje" Christoph

                                KurtZ
                                1. 0
                                  KurtZ
                                  1. 0
                                    Christoph
                                    1. 0
                                      KurtZ
                                      1. 0
                                        molily
                          2. 0
                            LanX²
                        2. 0
                          LanX²
                          1. 0
                            molily
                            1. 0
                              LanX²
                              1. 0
                                molily
                                1. 0
                                  KurtZ
                                  1. 0
                                    molily
                                    1. 0
                                      KurtZ
                              2. 0
                                KurtZ
                                1. 0
                                  LanX²
                    2. 0
                      molily
                      1. 0
                        LanX
                        1. 0
                          molily
                      2. 0
                        Christoph
            2. 0
              Siechfred
              1. 1

                Lieber SIechfred!

                KurtZ
                1. 0
                  Struppi
                  1. 0
                    Don P
                  2. 0
                    KurtZ
                    1. 0
                      Struppi
                      1. 0
                        KurtZ
                        1. 0
                          Struppi
                          1. 0

                            Lieber Struppi!

                            KurtZ
                          2. 1
                            Christoph
                            1. 0
                              Struppi
                            2. 0

                              Lieber Christof ;)

                              KurtZ
                              1. 0
                                KurtZ
                              2. 1
                                Christoph
                              3. 0

                                Lieber Christo__ph__ ;)

                                Christoph
                                1. 0
                                  KurtZ
                2. 0
                  Siechfred
                  1. 0

                    Lieber Siechfred!

                    KurtZ
                    1. 0
                      molily
                      1. 0
                        KurtZ
                3. 0
                  KurtZ
          2. 0

            Der Hash in Prototype

            Tim Tepaße
        3. 0
          Cheatah
          1. 0
            KurtZ
            1. 0
              Cheatah
      3. 0

        Übrigens, JS hat auch keine Arrays!

        KurtZ
        1. 0
          Don P
        2. 0
          Struppi
          1. 0
            KurtZ
            1. 0
              Struppi
              1. 0
                KurtZ
                1. 0
                  KurtZ
                2. 0
                  Struppi
                  1. 0
                    KurtZ
                    1. 0
                      Struppi
                      1. 0
                        KurtZ
                        1. 0
                          molily
                    2. 1
                      Don P
                      1. 0
                        KurtZ
                      2. 0
                        molily
                  2. 1
                    molily
        3. 2
          molily
        4. 0
          Harlequin
    3. 3
      KurtZ
    4. 0
      Struppi
      1. 0
        KurtZ
        1. 0
          molily
          1. 0
            KurtZ
            1. 0
              Christoph
              1. 0
                KurtZ
                1. 0
                  KurtZ
  3. 0

    Assoziative Arrays - es gibt sie doch!

    Christoph
    1. 0

      leicht modifiziert

      Christoph
      1. 0

        Iteratoren zur Realisierung von »reinen« Hashes nutzen

        Tim Tepaße
        1. 0
          Christoph
          1. 0
            Tim Tepaße
    2. 0
      Struppi