let text = '{"1":[{"a":"19:10","b":"20:30","c":"1"},{"a":"12:30","b":"13:40","c":3}],"2":[{"a":"14:10","b":"15:30","c":"2"},{"a":"9:30","b":"10:00","c":"3"}],"3":[{"a":"8:10","b":"8:20","c":"4"},{"a":"7:10","b":"7:20","c":"3"}],"4":[{"a":"8:10","b":"8:20","c":"5"},{"a":"6:20","b":"6:30","c":"f"}]}';
Martin L. schrieb:> Ist es moeglich mit javascript folgende Tabelle daraus einfach zu> generieren?
Ja, aber nicht "einfach".
> const obj = JSON.parse(text);
Das geht jedenfalls gar nicht. Rechts vom Gleichheitszeichen muss eine
Konstante stehen. Ein Funktionsaufruf ist aber keine Konstante.
Ist da keine Fehlermeldung gekommen? Und warum willst du überhaupt, dass
das Objekt eine Konstante ist?
Rolf schrieb:> Das geht jedenfalls gar nicht. Rechts vom Gleichheitszeichen muss eine> Konstante stehen. Ein Funktionsaufruf ist aber keine Konstante.
Natürlich geht das. die const-variable wird mit dem
Funktions-Rückgabewert initialisiert, und ist danach unveränderlich.
übrigens nur "obj" selber. Nicht die Objekte, auf die das zeigt.
Martin L. schrieb:> alert(obj.1[0].a);> Zeigt nichts an
Identifier können nicht mit 1 beginnen, deshalb ist obj.1 ungültig. Der
[] Operator kann sowohl bei Objekten als auch bei Arrays angewendet
werden, wenn ein Objekt Key kein gültiger Identifier ist, kann man damit
trotzdem darauf zugreifen. Hier also `obj[1][0].a` oder
`obj["1"]["0"].a` (kommt aufs selbe raus).
Martin L. schrieb:> Ist es moeglich mit javascript folgende Tabelle daraus einfach zu> generieren?
Da gibt es viele varianten. Per DOM (document.createElement(),
element.appendChild(node), element.classList.add("class"), etc.), per
Frameworks, etc.
Bei ganz kleineren Projekten nutze ich oft kleine Template
Hilfsfunktionen: https://jsfiddle.net/Lrjh7kyz/2/
Daniel A. schrieb:> Martin L. schrieb:>> Ist es moeglich mit javascript folgende Tabelle daraus einfach zu>> generieren?>> Da gibt es viele varianten. Per DOM (document.createElement(),> element.appendChild(node), element.classList.add("class"), etc.), per> Frameworks, etc.> Bei ganz kleineren Projekten nutze ich oft kleine Template> Hilfsfunktionen: https://jsfiddle.net/Lrjh7kyz/2/
Danke fuer dein Code der sieht echt gut aus...
Ist es eigentlich auch moeglich aus der Tabelle dann wieder ein json zu
erstellen automatisch?
Also, beim einfachen Parsen (textfriendly) bekomme ich da
4 Objekte -> 1 - 4. Und jedes Objekt enthält wiederum eine
Liste mit 2 Objekten, in denen dann a,b,c wieder in einem einzelnen
Objekt definiert sind.
Mit einer Sprache (die auch JSON-Funktionen bereitstellt) deiner Wahl
dürfte es doch einfach sein, die Uhrzeiten durch Iterieren heraus zu
filtern. Ich gehe mal jetzt von deinem angeängten Bild aus.
Das ganze in ein Gitter zu schreiben, ist ja auch kein Problem.
Da könnte man sogar auch ändern und erneut speichern.
Deute ich das so richtig ?
Martin L. schrieb:> const obj = JSON.parse(text);> 45alert(obj.1[0].a);> Zeigt nichts an
So funktioniert das auch nicht. Du mußt die JSON-Daten erst mal
einlesen, bevor Du parsen kannst - eigentlich logisch oder?
Das geht z.B. mit jQuery und der Funktion getJSON(url[, data][,
success]). Bei url gibt man die Datenquelle an. Bei mir ist das ein
PHP-Script welches auf dem Server läuft und die Daten an die Webseite
sendet. success ist die Funktion die ausgeführt wird, wenn der
Datenempfang erfolgreich war. In dieser Funktion werden die Daten dann
auch zur Anzeige gebracht.
Bei mir sieht das in etwa so aus (Auszug aus meiner Webseite):
// Note, we could get all td in e_cells.fragment and set rowspan to the correct number, it's easier to just put the rows in a tbody and set rowspan to a high number to fill all the rows in the tbody
Martin L. schrieb:> TypeError: Cannot read properties of undefined (reading 'cells') at> 'myFunction'>> Was mache ich da falsch?
Hier:
Martin L. schrieb:> rows[index - 1 + offset]
verrechnest du dich, und greifst auf eine nicht-existierende Row zu.
Εrnst B. schrieb:> Martin L. schrieb:>> TypeError: Cannot read properties of undefined (reading 'cells') at>> 'myFunction'>>>> Was mache ich da falsch?>> Hier:> Martin L. schrieb:>> rows[index - 1 + offset]>> verrechnest du dich, und greifst auf eine nicht-existierende Row zu.
Wie muss die Zeile dann richtig heißen?
Εrnst B. schrieb:> Martin L. schrieb:>> Wie muss die Zeile dann richtig heißen?>> Hängt davon ab, was du da auslesen wolltest.>> Ich würde davor eine Zeile einfügen:>
1
> console.log(`Bei Iteration ${index} wird mit Offset ${offset} auf Row
2
> ${index - 1 + offset} von ${rows.length} zugegriffen`);
3
>
> Oder mit dem Debugger dort einen Breakpoint setzen, und die Variablen> anschauen.
Hallo ich habe nun einen neune versuch gestartet
// extract header names from first row. NOTE: map cannot be called on result of querySelectorAll, it has to be converted to an array using spread operator first
// Note, we could get all td in e_cells.fragment and set rowspan to the correct number, it's easier to just put the rows in a tbody and set rowspan to a high number to fill all the rows in the tbody