Javascript Tabelle ausgeben (array)?

 - (Computer, programmieren, Informatik)

5 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Deine Datenstruktur ist sehr unlogisch.

Anscheinend möchtest du mehreren Ländern mehrere Werte zuweisen. AUs deiner Struktur ist überhaupt nicht ersichtlich welche Werte welchem Land zugeordnet sind, somit krampfst du dir bei deiner Schleife einen ab und hast, wie es scheint auch das ARRAY nicht ganz verstanden.

An deiner Stelle würde ich ein Objekt erstellen und mit diesem arbeiten:

Beispiel:

var data = {
  "Deutschland" : [789789, 2391803, 344543, 433332],
  "Oesterreich": [546778, 321556, 891223, 123333],
  "Schweiz" : [43567, 43778, 22234, 12343]
};
Woher ich das weiß:Berufserfahrung – Software-Entwickler

Du hast die while Schleife auf die Variable Laender angewendet. Das Laender Array hat aber ja nur einen Wert und kann deswegen nur einmal ausgegegen werden. Du musst die Schleife auf die Daten Variable anwenden. Dann kann die Schleife auch über mehrere Items laufen!

Woher ich das weiß:Berufserfahrung
cool27 
Fragesteller
 17.07.2019, 11:02

ach cool danke :D! die Daten werden mir jetzt angegeben, nur bekomme ich bei den Ländern ab der zweiten ein "undefined", wie bekomme ich das Problem gelöst? Würde gerne dort wieder ein Deutschland stehen haben oder nichts.

0

Öhm... du hast bei Laender ein Element. Die Schleife läuft für alle Elemente in Laender - also einmal. Du müsstest also wahrscheinlich noch Laender erweitern - oder die Schleife gegen "Daten" laufen lassen, dann hättest du aber eine reichlich sinnlose Tabelle.

cool27 
Fragesteller
 17.07.2019, 11:02

ach cool danke :D! die Daten werden mir jetzt angegeben, nur bekomme ich bei den Ländern ab der zweiten ein "undefined", wie bekomme ich das Problem gelöst? Würde gerne dort wieder ein Deutschland stehen haben oder nichts.

0

Wie genau soll dein Ergebnis denn aussehen? Willst du das der Array als Zahlenfolge ausgegeben wird oder soll dieser in einer neuen <td> ausgegeben werden?

cool27 
Fragesteller
 17.07.2019, 11:00

Also die Tabelle sollte weitergeführt werden in der nächsten Zeile entweder wieder mit dem Namen deutschland oder halt frei und dann in der zweiten Spalte die Zahl "2391803"

0
bluebird5  17.07.2019, 11:14
@cool27
var laender = ["Deutschland"];
var daten = ["1", "2", "3", "4"];
// ...
for (var i = 0; i < daten.length; i++) {
land = laender[i] || "";
bip = daten[i];
ausgabe += "<tr><td>" // .... und so weiter, da ist deine Zeile schon richtig - nur halt die Variablen "land" und "bip" einsetzen.
}

ungetestet... aber so würde ich das probieren.

Daneben noch ein paar Anmerkungen:

  • Variablennamen sollten idealerweise auf englisch sein, mit einem Kleinbuchstaben beginnen und immer nach dem benannt sein, was sie sind - "Daten" ist also ein ganz schlechter Variablenname.
  • Schau dir die Schleifentypen nochmal an. Wenn du wie in diesem Fall weißt, wie viele Schleifendurchläufe du brauchst, ist die for-Schleife (oder auch forEach) besser geeignet als do... while. Meiner Erfahrung nach sieht und braucht man fußgesteuerte Schleifen (do... while) eher selten. So gäbe es auch in deinem Beispielcode Fehler, wenn Laender ein leeres Array wäre.
  • Strings als HTML-Elemente ergeben schwer wartbaren Code. Nimm lieber irgendwas in Richtung https://www.w3schools.com/js/js_htmldom_nodes.asp Wenn du JavaScript einigermaßen kannst, wäre auch der Blick auf ein Framework (React, Vue, Angular, ...) sinnvoll. Damit machst du dir das Leben noch leichter.
  • Warum enthält das Array "Daten" Strings und keine Zahlen?

Schreib modernes JavaScript und nimm lieber let und const anstelle von var.

1
bluebird5  17.07.2019, 11:17
@cool27

und wie JayC71 schon schreibt - ein Land und sein BIP gehören zusammen in ein Objekt

0
Xueen  17.07.2019, 11:04

Wie einige andere dir bereits geschrieben haben bezieht sich deine Schleife auf den Laender-Array. Pro Element in diesem Array (in deinem Fall ein Element = Deutschland) gibt sie eine Zahl aus, die erste im Daten-Array. Wenn du eine weiter <td> mit den anderen Daten möchtest musst du entweder Deutschland mehrmals in deinen Laender-Array schreiben oder, was natürlich sehr viel besser wäre, deinen Code abändern.

1

While läuft nur einmal durch, weil Laender die Länge 1 hat, wenn ich es richtig sehe.