• Jetzt anmelden. Es dauert nur 2 Minuten und ist kostenlos!

Frage Daten für dynamische Tb herrichten (Array)

colaholiker

Mitglied
Hallo allerseits,

für eine kleine Tabelle mit nur 3 Spalten (2 sind relevant) möchte ich so 1..5 Datensätze aufteilen, die ich im String 't5' als Beispiel angegeben habe:
Javascript:
function t5_split() {       
        
    let t5 = 'Cl.065--4--Cl.082--2--Cl.038--2--Cl.098--2';   
    
    //-- verarbeiten t5 bei variabler Anzahl Clienten
    const
        Qc = t5.split("--"),
        lenQc = (Qc.length);    //-- Anz. Daten in t5
    const clients = [];

    for(let i=0; i<lenQc; i+=2 ) {

        //window['C' + (i + 1)] = Qc[i];
    
        //window['clients[' + i + ']'] = window[ 'Qc[' + i + ']' + ','] + window[ 'Qc[' + i++ + ']'];

        window['clients[' + i + ']'] = Qc[i];
    }
}
console.log('---- clients[0][0]  =  ' + clients[0][0] );
console.log('---- clients[3][1]  =  ' + clients[3][1] );
        
        
/*       
clients[0] = ['Cl.98', '1'];
clients[1] = ['Cl.86', '3'];
clients[2] = ['Cl.65', '1'];
clients[3] = ['Cl.56', '2'];           
*/
Wie zu erkennen, sind die Trenner zwischen jedem Datensatz '--'.
Eine Tabellenzeile soll mit zB. 'Cl.065' in der ersten, und '2' in der 2.Spalte gefüllt werden.
Daher nimmt die for- Schleife jedes 2.Item.

Die erste auskommentierte 'window'- Zeile funktioniert in einem anderen Codeteil und war mein Beispiel zum abgucken.
Die 2. auskommentierte 'window'- Zeile ist wie ich das Beispiel angepaßt habe, geht aber nicht,
und die dritte "scharfe" 'window'- Zeile ist eine Vereinfachung davon, geht auch nicht.

Im console.log sieht man, was ich erreichen möchte.
Das ganze 'verschachtelte' Array ist am Ende zu sehen.

Was ich nicht hinbekomme, ist wohl, eckige Klammern in eckige Klammern zu setzen.

Hab ich die falsche Methode gewählt?
TIA!
 
Das war auch ein Irrtum von mir, ich dachte an das hinzufügen mit push, damit geht das und sollte auch bei deinem Beispiel funktionieren.
 
Javascript:
clients[clients.length] = [Qc[i],Qc[i + 1]] // geht
Das Window-Objekt ist unnötig...
 
Zuletzt bearbeitet:
Um die Lesbarkeit zu verbessern würde ich Objekte verwenden:
Code:
        let t5 = 'Cl.065--4--Cl.082--2--Cl.038--2--Cl.098--2';

        //-- verarbeiten t5 bei variabler Anzahl Clienten
        const
            Qc = t5.split("--"),
            lenQc = (Qc.length);    //-- Anz. Daten in t5
        const clients = [];
        const clients_2 = {};

        for (let i = 0; i < lenQc; i += 2) {
            // Ein Array mit Objekten darin:
            clients.push({ name: Qc[i], nr: Qc[i + 1] });
            // Oder ein Objekt mit dem Client als Schlüssel:
            clients_2[Qc[i]] = Qc[i + 1]
        }
        console.log(clients);
        console.log(clients_2);
 
Guten Morgen ihr zwei,

der Tip mit 'push()' von Oliver hat mir geholfen!
Ich hatte vorher schon was darüber gelesen, aber gedacht, Werte auch auf 'direkte Weise' in ein Array schreiben zu können.

Diese Zeile steht jetzt in der for-Schleife:
Javascript:
clients.push(Qc[i] + ',' + Qc[i+1]);
und -auch neu gelernt: 'clients.toString()', damit sehe ich mit 'console.log':
Code:
[console]
clients.toString()  =  Cl.065,4,Cl.082,2,Cl.038,2,Cl.098,2
clients[0].toString()  =  Cl.065,4
clients[1].toString()  =  Cl.082,2
clients[2].toString()  =  Cl.038,2
clients[3].toString()  =  Cl.098,2
clients[0][0]  =  C
Warum bekomme ich aber in der letzten Zeile nur 'C' herasus?
Die Abfrage nach 'Clients[0][0]' sollte doch 'Client065' sein?
Hab ich die Verschachtelung wohl doch nicht hinbekommen!

Aber evtl. reicht das Ergebnis ja schon, um die einzelnen Zellen meiner Tabelle zu füllen. Das versuche ich jetzt mal...
 
Guten Morgen @colaholiker
mit dieser Anweisung:
Code:
clients.push(Qc[i] + ',' + Qc[i+1]);
hängst Du einen String "Cl.065,4"an das Array an. Mit clients[0][0] holst Du dann das erste Zeichen dieses Strings heraus.
Was Du wahrscheinlich vor hast, ist, ein Array hinzu zu fügen, dann musst Du es so machen:
Code:
clients.push([Qc[i], Qc[i+1]]);
(dies ungetestet)
 
Hi Sempervivum,

Die Katze jagt ihren Schwanz!
Code:
[console]
     Qc: Cl.082,1,Cl.038,1,Cl.065,1,Cl.098,1
clients: Cl.082,1,Cl.038,1,Cl.065,1,Cl.098,1

Die Zeile 'Clients:' ist das Ergebnis sowohl meiner Zeile in #8 als auch Deines Vorschlags in #9.

_Fast_ zum lachen ist, daß das Original-Array 'Qc' in der for- Schleife genauso wieder nachgebaut wird!!!

Aber ich sehe gerade auch das:
Code:
[console]
clients[0][0]  =  Cl.082
clients[0][1]  =  1
...das wollte ich ja haben.
Hätte ich gleich Qc hernehmen sollen?
Grrmpf, ich teste...
 
daß das Original-Array 'Qc' in der for- Schleife genauso wieder nachgebaut wird!!!
Das sieht nur in der Darstellung durch toString() so aus, in Wirklichkeit unterscheiden beide sich, Qc ist eindimensional, clients jedoch zweidimensional. Lass mal das toString bei der Ausgabe in der Console weg, dann wirst Du es erkennen:
Code:
console.log(Qc);
console.log(clients);
 
Du hast recht, die Darstellung hat getäuscht.
Inzwischen hab ich auch erkannt, daß Dein Vorschlag aus #9 funktioniert.

Wie Oliver schrieb, ergibt sich durch den i-step der Schleife, daß ich nicht sofort die Array- Items für meine Tabelle verarbeiten kann.
Da muß ich halt eine weitere Schleife dransetzen.
Das sollte klappen...
 
...nö.
Ich habe in meiner Tabelle <span> verwendet und wollte deren IDs auch in Arrays verpacken:
Javascript:
const
(...)
z6s1    = document.getElementById('ZBsp2r6c1'),    //-- Tb Zeile 6 Sp1
z6s3    = document.getElementById('ZBsp2r6c3'),    //-- Tb Zeile 6 Sp3
z7s1    = document.getElementById('ZBsp2r7c1'),    //-- Tb Zeile 7 Sp1
z7s3    = document.getElementById('ZBsp2r7c3'),    //-- Tb Zeile 7 Sp3
z8s1    = document.getElementById('ZBsp2r8c1'),    //-- Tb Zeile 8 Sp1
z8s3    = document.getElementById('ZBsp2r8c3'),    //-- Tb Zeile 8 Sp3
z9s1    = document.getElementById('ZBsp2r9c1'),    //-- Tb Zeile 9 Sp1
z9s3    = document.getElementById('ZBsp2r9c3'),    //-- Tb Zeile 9 Sp3
spx        = [z6s1,z7s1,z8s1,z9s1],
spy        = [z6s3,z7s3,z8s3,z9s3],
(...)
Bei spx[0] kommt 'null' heraus. Muß ich direkt 'document.getElementById()' ins Array setzen?
Wenn ich das richtig verstehe, enthält ein Array ja immer Objekte.

In der Schleife wollte ich das Ausfüllen der Tabelle so erreichen:
Javascript:
spx[i].innerHTML = clients[i][0];
spy[i].innerHTML = clients[i][1];
Das sieht mir aber etwas komisch aus!

Aber ist noch auskommentiert, bis die Arrays spx und spy funktionieren...
 
Bei spx[0] kommt 'null' heraus.
Das bedeutet, dass das Ergebnis des ersten getElementById ebenfalls null ist. Sicher kein Schreibfehler bei der ID? Und die Elemente existieren auch, wenn das JS abläuft? D. h. das JS ist nach dem HTML der Elemente notiert?

Muß ich direkt 'document.getElementById()' ins Array setzen?
Musst Du nicht aber kannst Du, beides würde funktionieren.
 
Sicher kein Schreibfehler bei der ID?
Nein, aber die Auswirkung später Nacht: diese Version der Webseite war noch garnicht online.
Danach lief alles bald, sogar mit meinen komischen Zeilen in der zweiten for-Schleife.
Hier nochmal die Schleifen:
Code:
const
    Qc = t5.split("--"),
    lenQc = (Qc.length);    //-- Anz. Clienten in t5

for(let i=0; i<lenQc; i+=2 ) {
    clients.push([Qc[i], Qc[i+1]]);
}

const
    lenClients = (clients.length);
for(let i=0; i<lenClients; i++ ) {
    spx[i].innerHTML = clients[i][0];
    spy[i].innerHTML = clients[i][1];
}
In HTML sieht eine der Tabellenzeilen so aus:
HTML:
<!-- Zeile7 Anz  nur vh wenn gesteuert -->                  
<tr class='TbZbWs001_Sp2_tbz' id='rolZ2' style='display: none'>
    <td class = 'ZBsp2col1'>
        <span id='ZBsp2r7c1'>555</span>
    </td>
    <td class = 'ZBsp2col2x'>x</td>
    <td class = 'ZBsp2col3'>
        <span id='ZBsp2r7c3'>ClientNr</span>
    </td>
</tr>
Ich habe die Zeile bei <tr> ausgeblendet. In js hebe ich das auf
Javascript:
zeile[i].style='display: float';

Bei den Recherchen habe ich meist Beispiele gefunden, wo die Zeilen erst mit js erzeugt wurden. Mir hat diese Methode nicht gefallen, weil ja auch noch Klassen und IDs zugewiesen müssen, und das Ganze taucht dann auch nicht im Seitenquelltext auf.

Jedenfalls, vielen Dank für die Unterstützung!
C.
 
Wenn ich das richtig sehe, dürfte das auch mit nur einer Schleife gehen:
Code:
const
    Qc = t5.split("--"),
    lenQc = (Qc.length);    //-- Anz. Clienten in t5

for(let i=0, j = 0; i<lenQc; i+=2 , j++) {
    spx[j].innerHTML = Qc[i];
    spy[j].innerHTML = Qc[i + 1];
}
wieder ungetestet
 
Gute Idee, eine zweite Zählvariable einzusetzen!
Vielleicht etwas mehr Code weil das Array 'Clients' erstellt werden muss.
Das teste ich mal wenn der Magen nicht mehr knurrt ;-)

Sempervivum, wir müßten nochmal über die Uhr schnacken, die wir letztews Jahr gebaut haben (mit den zufälligen Zifferblättern und Themen dazu).
Mach ich aber ein extra Thema auf.
C.
 

Neueste Beiträge

Zurück
Oben