Javascript zweidimensionales Array leere Zellen

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:
Arr = [[3,'A'],[],[2,'B'],[],[3,'C'],[4,'D'],[],[],[],[],[6,'E']];

   var Brr = new Array();
   for(var i=0; i<Arr.length; i++){
      Brr[i] = new Array(1);
      if(Arr[i][0]!='' && Arr[i][1]!=''){
          Brr[i][0]=Arr[i][0];
          Brr[i][1]=Arr[i][1];
          }
        }

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:
Code:
      Brr[i] = new Array(1);
...du erzeugst das neue Array-Element bereits bevor du prüfst, ob das dazugehörige Äquivalent leer ist.
So sollte es besser gehen:
Code:
Arr = [[3,'A'],[],[2,'B'],[],[3,'C'],[4,'D'],[],[],[],[],[6,'E']];

   var Brr = new Array();
   for(var i=0; i<Arr.length; i++){
      
      if(Arr[i][0]!='' && Arr[i][1]!=''){
          Brr[i] = new Array(1);
          Brr[i][0]=Arr[i][0];
          Brr[i][1]=Arr[i][1];
          }
        }
 
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:
Produkte[0]='N*m*71835*Produkt1*665925*DE*23*0*0*0*0';
Produkte[1]='O*m*164*Produkt2*6787*DE*19*0*0*0*0';
.......
Produkte[39]='O*f*199*Produkt39*6689583*DE*19*0*0*0*0';

Aus dem Array Produkte muss ich bestimmte Produkte wählen und ausgeben:
Zum Beispiel: Produkt-ID und Produkt-Name.

HTML:
   var Prr = new Array();
   
   for(var i=0; i<Produkte.length; i++){

            var ArrString = Produkte[i].split('*');

               switch(ArrString[1]){
                    case 'f': // hier wird die Schleife angehalten. Verstehe ich nicht warum?
                     if(ArrString[0]=='N'){
                       Prr[i] = new Array(1);
                       Prr[i][0]=ArrString[6];
                       Prr[i][1]=ArrString[2]+':'+ArrString[3];
                       }
                     else{
                       Prr[i] = new Array(1);
                       Prr[i][0]=ArrString[6];
                       Prr[i][1]=ArrString[2]+':'+ArrString[3];
                       }
                  break;
                 }
                }

Mein Problem ist mit der Anweisung:
Code:
Prr[i] = 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:
Code:
Prr[i] = 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:
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:
   var Prr = new Array();
   var intIndex = 0;
   
   for(var i=0; i<Produkte.length; i++){

            var ArrString = Produkte[i].split('*');

               switch(ArrString[1]){
                    case 'f': // hier wird die Schleife angehalten. Verstehe ich nicht warum?
                     if(ArrString[0]=='N'){
                       Prr[intIndex] = new Array();
                       Prr[intIndex][0]=ArrString[6];
                       Prr[intIndex][1]=ArrString[2]+':'+ArrString[3];
                       }
                     else{
                       Prr[intIndex] = new Array();
                       Prr[intIndex][0]=ArrString[6];
                       Prr[intIndex][1]=ArrString[2]+':'+ArrString[3];
                       }
                  intIndex++;
                  break;
                 }
                }
Zudem habe ich die Eins zum Dimensionieren des Arrays herausgenommen - wie schon von Sven angedeutet.

Ciao
Quaese
 
Zurück