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

Frage flexibles Array, vorhandene Items herausfiltern

colaholiker

Mitglied
Hallo allerseits,

Mein Problem ist bestimmt einfach lösbar, aber mein Code wird immer dicker...

Das Beispiel-Array mit 2 verschiedenen Trennern, ':::' und '::' wird zyklisch aufgerufen:

Array = 'Arraykopf:::001::daten::daten:::002::daten::daten:::003::daten::daten:::004::daten::daten:::005::daten::daten'

Getrennt wird zuerst bei ':::', es entstehen Unter-Arrays wie zB. '003::daten::daten'.
(Die Kenn-Nummern der Unterarrays sind im Haupt-Array immer aufsteigend., die Anzahl der Unterarrays lasse ich bereits feststellen.)
Soweit alles einfach.

Jetzt können aber beliebig viele der Unterarrays mal fehlen. Das darf keinen Fehler erzeugen (Array.length 1...5).
Die vorhandenen Untrerarrays müssen dann Anhand ihrer Nummer ('003::daten::daten') in eine laufende Variable abgelegt werden, je nach Anzahl 'pm1= ...', pm2=...' usw.
Beispiel wenn 001,003 fehlen:

pm1 = '002::daten::daten';
pm2 = '004::daten::daten';
pm3 = '005::daten::daten';

So, habe ich dann vor, die Unterarrays weiter zu verarbeiten und an passende Stellen einer Tabelle zu setzen.

Ich würde mich freuen, wenn mir jemand eine kurze Lösung zeigen könnte.
Ich versuche zZt., alles mit vielen IF- Abfragen und Schleifen hinzubekommen, aber :-(

TIA, c
 
Hallo @colaholiker und willkommen zurück!

Wenn ich versuche, das genau so umzusetzen, wie Du es beschreibst, komme ich zu diesem Ergebnis:
Code:
    <script>
        const
            arrStr = 'Arraykopf:::001::daten::daten:::002::daten::daten:::003::daten::daten:::004::daten::daten:::005::daten::daten',
            splitted1 = arrStr.split(':::');
        let
            // Ein leeres assoziatives Array bzw. Objekt erzeugen:
            resultArray = {},
            // Das erste Element in dem gesplitteten Array ist der Kopf,
            // wir entfernen ihn:
            arrayHead = splitted1.shift();
        splitted1.forEach(item1 => {
            const
                splitted2 = item1.split('::'),
                // Das erste Element in dem gesplitteten Array ist der Schlüssel,
                // wir holen ihn heraus:
                key = splitted2.shift();
            // Das gesplittete Array fügen wir unter dem Schlüssel
            // dem Ergebnis hinzu:
            resultArray[key] = splitted2;
        });
        console.log(arrayHead, resultArray);
    </script>
Dabei bin ich davon ausgegangen, dass die "001", "002" usw. als Schlüssel verstanden werden können um ein assoziatives Array anzulegen.

Allerdings vermute ich stark, dass man das anders aufziehen könnte, indem man den String als JSON erzeugt. (Ich wiederhole mich, ich weiß.) Aber dazu müsste man wieder mehr wissen, in welchem Zusammenhang sich das abspielt.
 
Ein früher Morgen und ein leerer Kopf...
Javascript:
function daten_PMG_Werte(arrT) {
    const
        anzItms = anzZeichen(arrT, ':::'),    //-- zur Funktion
        Tm = arrT.split(":::");
    
    for (let i=1; i <= anzItms; i++) {
        var pm = Tm[i].substring(Tm[i].indexOf(":::"));
        PMG3_anzeigen(pm);     //-- zur Funktion
    }
}

//-- Ws003 rechte Tabelle füllen   
function PMGs_anzeigen(pm) {
    if(pm.includes('001')){
...usw.
}
 
Guten Morgen Sempervivum,

da haben wir uns überlagert...

Per Objekt hatte ich es zuerst auch versucht, aber eine einfache Variable (pm) transportiert die Unterarrays auch zur Verarbeitung.
Wichtig ist die variable Länge der Schleife entsprechend dem Hauptarray 'arrT' und der entsprechend limitierte Aufruf der Verarbeitung. Dort frage ich auch den 'Schlüssel' ab, wie angedeutet.

Danke Dir trotzdem für Deine Mühe,
c.

Mmh. [Brille] Deins sieht kürzer aus wie meins! Ich baue deinen Vorschlag mal hier ein und melde mich später...
 
Zuletzt bearbeitet:
Dies:
Die vorhandenen Untrerarrays müssen dann Anhand ihrer Nummer ('003::daten::daten') in eine laufende Variable abgelegt werden
...

pm1 = '002::daten::daten';
pm2 = '004::daten::daten';
pm3 = '005::daten::daten';
habe ich bewusst ignoriert, weil ich von diesem Vorgehen ein Feind bin :wink:: Man verbaut sich damit die Möglichkeit, die Variablen in einer Schleife weiter zu verarbeiten. Du schreibst ja selbst:
So, habe ich dann vor, die Unterarrays weiter zu verarbeiten und an passende Stellen einer Tabelle zu setzen.
 
Dies:
habe ich bewusst ignoriert, weil ich von diesem Vorgehen ein Feind bin :wink:: Man verbaut sich damit die Möglichkeit, die Variablen in einer Schleife weiter zu verarbeiten. Du schreibst ja selbst:
Jaaa. Stammt noch von gestern, bevor ich gedacht habe 'frag endlich mal im Forum'...

zu #2:
..,das ist der Unterschied Profi und Laie.
Deine Version habe ich angepaßt und sie läuft in meinem Projekt.
Für meinen Zweck konnte ich sogar noch ein paar Sachen weglassen wie 'resultArray' und habe meinen geliiiebten Trenner '::' zugunsten ',' geändert, was im vorliegenden Fall funktioniert:
Code:
    const
        arrStr = tCheck,
        splitted1 = arrStr.split(':::');
    let
        // Ein leeres assoziatives Array bzw. Objekt erzeugen:
        //-- resultArray = {},
        // Das erste Element in dem gesplitteten Array ist der Kopf,
        // wir entfernen ihn:
        arrayHead = splitted1.shift();
    splitted1.forEach(item1 => {
        const
            splitted2 = item1.split('::');
            // Das erste Element in dem gesplitteten Array ist der Schlüssel,
            // wir holen ihn heraus:
            //-- key = splitted2.shift();
        // Das gesplittete Array fügen wir unter dem Schlüssel
        // dem Ergebnis hinzu:
        //resultArray[key] = splitted2;
        //
        console.log(splitted2);
        PMG3_anzeigen(splitted2); //-- zur Funktion
    });
    //--console.log(arrayHead, resultArray);
Es ist frappierend wie kurz Dein Code wird wenn die Kommentare wegfallen.
Evtl. baue ich das gleich am Anfang der Verarbeitungsfunktion ein!

Vielen Dank Sempervivum.
c.
 
Zurück
Oben