1. Diese Seite verwendet Cookies. Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies. Weitere Informationen

Javascript zweidimensionales Array leere Zellen

Dieses Thema im Forum "Javascript & Ajax" wurde erstellt von pchilfe, 4. August 2007.

  1. pchilfe

    pchilfe Erfahrenes Mitglied

    Liebe Freunde,

    Ich habe folgendes Problem.

    Ich habe ein zweidimensionales Array das auch leere Zellen enthält. Ich möchte die Leere Zellen aus dem Array entfernen.

    Dafür habe folgende Schleife:

    HTML:
    1.  
    2. Arr = [[3,'A'],[],[2,'B'],[],[3,'C'],[4,'D'],[],[],[],[],[6,'E']];
    3.  
    4.    var Brr = new Array();
    5.    for(var i=0; i<Arr.length; i++){
    6.      Brr[i] = new Array(1);
    7.      if(Arr[i][0]!='' && Arr[i][1]!=''){
    8.          Brr[i][0]=Arr[i][0];
    9.          Brr[i][1]=Arr[i][1];
    10.          }
    11.        }
    12.  
    Wenn ich das Array Brr, nach dem aussortieren der leeren Zellen, ausgebe. Enthält immer noch die leere Zellen genau so wie das Array Arr.

    Warum :confused:
    Zuletzt bearbeitet: 4. August 2007
  2. Sven Mintel

    Sven Mintel Mitglied

    Code (Text):
    1.  
    2.       Brr[i] = new Array(1);
    3.  
    ...du erzeugst das neue Array-Element bereits bevor du prüfst, ob das dazugehörige Äquivalent leer ist.
    So sollte es besser gehen:
    Code (Text):
    1.  
    2. Arr = [[3,'A'],[],[2,'B'],[],[3,'C'],[4,'D'],[],[],[],[],[6,'E']];
    3.  
    4.    var Brr = new Array();
    5.    for(var i=0; i<Arr.length; i++){
    6.      
    7.       if(Arr[i][0]!='' && Arr[i][1]!=''){
    8.           Brr[i] = new Array(1);
    9.           Brr[i][0]=Arr[i][0];
    10.           Brr[i][1]=Arr[i][1];
    11.           }
    12.         }
    13.  
  3. pchilfe

    pchilfe Erfahrenes Mitglied

    Hallo,

    Das habe ich Propiert aber funktioniert nicht, weil die For-Scfleife angehalten wird.

    Das Array das ich bearbeiten möchte sieht so aus:
    HTML:
    1.  
    2. Produkte[0]='N*m*71835*Produkt1*665925*DE*23*0*0*0*0';
    3. Produkte[1]='O*m*164*Produkt2*6787*DE*19*0*0*0*0';
    4. .......
    5. Produkte[39]='O*f*199*Produkt39*6689583*DE*19*0*0*0*0';
    6.  
    Aus dem Array Produkte muss ich bestimmte Produkte wählen und ausgeben:
    Zum Beispiel: Produkt-ID und Produkt-Name.

    HTML:
    1.  
    2.    var Prr = new Array();
    3.    
    4.    for(var i=0; i<Produkte.length; i++){
    5.  
    6.            var ArrString = Produkte[i].split('*');
    7.  
    8.               switch(ArrString[1]){
    9.                    case 'f': // hier wird die Schleife angehalten. Verstehe ich nicht warum?
    10.                     if(ArrString[0]=='N'){
    11.                       Prr[i] = new Array(1);
    12.                       Prr[i][0]=ArrString[6];
    13.                       Prr[i][1]=ArrString[2]+':'+ArrString[3];
    14.                       }
    15.                     else{
    16.                       Prr[i] = new Array(1);
    17.                       Prr[i][0]=ArrString[6];
    18.                       Prr[i][1]=ArrString[2]+':'+ArrString[3];
    19.                       }
    20.                  break;
    21.                 }
    22.                }
    23.  
    Mein Problem ist mit der Anweisung: Prr = new Array(1);
    Wenn ich die Anweisung direkt nach der For-Schleife schreibe, wird ein 2dim Array erzeugt das auch leere Zellen enthält. Wenn ich die Anweisung: Prr = new Array(1); direkt nach der IF-Bedingung mache, wird die Schlefe nach dem ersten case angehalten?

    Ich weiss nicht was ich tun soll :confused:?

    Bitte um Hilfe .. vielen Dank im Vorraus.
    Zuletzt bearbeitet: 4. August 2007
  4. Quaese

    Quaese Moderator Moderator

    Hi,

    das Problem dürfte die Zählvariable i sein. Diese wird in jedem Durchlauf erhöht, das Array Prr muss
    jedoch nur bei einem "Treffer", dh. einem f eine neue Komponente erhalten.

    Du könntest eine extra Zählvariable für das Prr-Array mitlaufen lassen.
    Code (Text):
    1.  
    2.    var Prr = new Array();
    3.    [B]var intIndex = 0;[/B]
    4.    
    5.    for(var i=0; i<Produkte.length; i++){
    6.  
    7.             var ArrString = Produkte[i].split('*');
    8.  
    9.                switch(ArrString[1]){
    10.                     case 'f': // hier wird die Schleife angehalten. Verstehe ich nicht warum?
    11.                      if(ArrString[0]=='N'){
    12.                        Prr[[B]intIndex[/B]] = new Array();
    13.                        Prr[[B]intIndex[/B]][0]=ArrString[6];
    14.                        Prr[[B]intIndex[/B]][1]=ArrString[2]+':'+ArrString[3];
    15.                        }
    16.                      else{
    17.                        Prr[[B]intIndex[/B]] = new Array();
    18.                        Prr[[B]intIndex[/B]][0]=ArrString[6];
    19.                        Prr[[B]intIndex[/B]][1]=ArrString[2]+':'+ArrString[3];
    20.                        }
    21.                   [B]intIndex++;[/B]
    22.                   break;
    23.                  }
    24.                 }
    25.  
    Zudem habe ich die Eins zum Dimensionieren des Arrays herausgenommen - wie schon von Sven angedeutet.

    Ciao
    Quaese
  5. pchilfe

    pchilfe Erfahrenes Mitglied

    Ja genau. Jetzt funktioniert alles wieder.
    sehr gut.
    Vielen Vielen Dank.

Diese Seite empfehlen