Array in Javascript, Probleme mit der Ausgabe/Struktur

Gast #6318797
Lesenswert?

Hallo,
wenn man mit Arrays arbeitet, werden die einzelnen Objekte im Array ja 
bei der Ausgabe häufig mit "" abgetrennt:
1
//die Werte von content sind nicht relevant. Es geht nur darum, dass content 8 Objekte beinhaltet.
2

3
var content = [5, 4, 8, 8, 6, 2, 4, 4];  //<-- Länge = 8
4

5
//test erhält hier so viele Objekte, wie content lang ist
6
var test = [];
7
    for (var i in content) {
8
    test.push(i);
9
}
10

11
die Ausgabe von test:
12
[ "0", "1", "2", "3", "4", "5", "6", "7" ]

An sich klappt alles. Der Code dient auch eher zum Zeigen.
Doch kann ich es irgendwie verhindern, dass Javascript bei der Ausgabe 
bzw. weiteren Nutzung von Arrays, die mit z.B. for-Schleifen entstehen 
und somit variabel sind, diese "" vor und nach jedem Objekt setzt?

Wenn ich ein Array erstelle mit festen Werten, also so:
1
var test2 = [0, 1, 2, 3, 4, 5, 6, 7];
und das dann mit console.log ausgebe, ist die Ausgabe gleich, aber ohne 
diese Anführungsstriche.

Mein Array verändert sich jedoch immer etwas, weswegen ich es eben mit 
einer for-Schleife erstelle.

Gibt es da eine Möglichkeit, dass eben diese "" nicht entstehen? Ich 
kann die nämlich nicht weiterverarbeiten. Ein String nimmt das JS-Tool 
leider nicht an. und die Anführungszeichen sind ebenfalls ein Problem.
Die gehören ja im Prinzip nicht zum Inhalt den ich übergebe. 
Dementsprechend kann ich das Array auch nicht wirklich manipulieren und 
die "" ausblenden.
Ich bin leider ziemlich auf Arrays angewiesen und kann wie gesagt nicht 
auf einen String ausweichen.

Vielleicht habt ihr ja einen Denkanstoß für mich :)
Gast #6318804
Lesenswert?

parseInt() existiert, aber dich interessiert doch nur die Laenge, 
richtig? Dann ignoriere den Inhalt und verwende .length.
1
var content = [5, 4, 8, 8, 6, 2, 4, 4];  //<-- Länge = 8
2

3
var test = Array();
4
for (var i = 0; i < content.length; i++) {
5
    test.push(i);
6
}
Gast #6318809
Lesenswert?

Ich habe das nur als Beispiel benutzt. Mich interessiert schon der 
Inhalt.

Im konkreten Fall habe ich ein Array mit date-Angaben. (Länge ist 
Variabel. also einige Daten werden darin gespeichert. Stammend aus einer 
Datenbank)
Also
1
[2020-06-26 12:00:00, 2020-06-27 12:00:00, 2020-06-28 12:00:00, ...]

Den Array füge ich mit einem anderen Zusammen. Sodass ich Datum-Wert 
Paare bekomme.  Es geht also eigentlich nicht um die Länge des Array. 
Nur nutze ich eben eine solche for-Schleife wie im Beispiel, da die 
Anzahl und der Inhalt der Quellelemente eben variabel ist.

Wenn ich diesen gemeinsamen Array ausgebe, habe ich das Problem mit den 
Anführungsstrichen.

Sorry falls ich zu wenig Infos am Anfang gegeben habe... bin etwas 
genervt von dem Problem weil es mich so aufhält :/
Gast #6318818
Lesenswert?

Also sowas in der Art?
1
>> "foo " + (new Date()).toISOString()
2
"foo 2020-06-27T22:36:37.968Z"
naja, wenn du Dinge concatenierst, dann ist dein Date-Datentyp weg und 
raus kommt ein String, und der wird nunmal durch Quotes eingeschlossen.

Vielleicht willst du stattdessen ein Tuple nehmen?
1
>> [123, (new Date()).toISOString()]
2
Array [ 123, "2020-06-27T22:36:40.497Z" ]
Gast #6318826
Lesenswert?

Du hast es im Prinzip genau erfasst.
Aber das Format des Datums ist garnicht das Problem zum Glück. Also new 
Date()).toISOString() müsste ich nach meiner Einschätzung garnicht mehr 
anwenden.

Ich mache das aktuell so:
1
for(var i in data) {
2
  Abstand.push(data[i].Abstand);
3
  Zeit.push(data[i].Zeit);
4
}
--> hier bekomme ich aus einem Array mit mehreren Wertereihen die beiden 
Array heraus (das sind 2 von 5 Datenreihen die data beinhaltet).
1
var werte = [];
2
for(var i in Zeit) {
3
  werte.push(' {x: "' + Zeit[i] + '",y: ' + Abstand[i] + '}');
4
}
--> hier klatsche ich diese beiden Werte nun immer zusammen. Mit 
folgender Ausgabe:
1
 ["{x: "2020-04-01 06:39:13",y: 104.2}", "{x: "2020-04-04 06:39:07",y: 105.6}","{...}"]

Die ist auch fast so wie ich sie will. Nur die "" vor den einzelnen 
Objekten zerschießen mir das Programm.
Es müsste so sein:
1
 [{x: "2020-04-01 06:39:13",y: 104.2}, {x: "2020-04-04 06:39:07",y: 105.6},{...}]
Gast #6318830
Lesenswert?

Ich weiß nicht ganz ob ich dich richtig verstehe.

Es stimmt, als String habe ich das auch schon ins richtige Format 
bekommen, aber mein Tool akzeptiert leider keinen String.
Es handelt sich um chart.js und das will als Datensatz mit x und y 
Werten immer nur einen Array... Allerdings bekomme ich den nicht richtig 
formatiert.
Gast #6318832
Lesenswert?

FloB schrieb:
> Die ist auch fast so wie ich sie will. Nur die "" vor den einzelnen
> Objekten zerschießen mir das Programm.
Ich denke eher, dein Date-String ist ein weiteres Problem.

Du willst wohl 
https://www.chartjs.org/docs/latest/charts/line.html#point verwenden, 
doch das erwartet jeweils integers. Stattdessen erscheint mir 
https://www.chartjs.org/docs/latest/axes/cartesian/time.html#input-data 
angemessen, das kann Date-Typen. Deine Rohdaten sind ggf. mit 
Date.parse() von String nach Date zu wandeln.
Gast #6318835
Lesenswert?

Ja du hast im Prinzip recht.

Aber diese data: ... Datensatz habe ich halt als Array und nicht direkt 
ins Script geschrieben, weil sich die genauen Daten eben täglich 
vermehren.

schreibe ich das so:
1
data: [ {x: "2020-04-01 06:39:13",y: 104.2}, {x: "2020-04-04 06:39:07",y: 105.6}, ...]
funktioniert die Anzeige. Allerdings habe ich die Werte natürlich direkt 
hingeschrieben

mache ich das gleiche aber als Array, geht es nicht mehr.
1
data: werte    (werte ist der Array den ich vorhin gebildet habe)

Der Werte Array den habe ich oben gebildet. Der ist identisch zu der 
manuellen Eingabe oben, allerdings mit den Anführungsstrichen zwischen 
den Objekten.
Ich denke da liegt das Problem

Das Date Format funktioniert sonst einwandfrei und er sieht die 
date-Werte auch als solche an und ordnet sie zeitlich richtig ein.
Gast #6318838
Lesenswert?

FloB schrieb:
> Der Werte Array den habe ich oben gebildet. Der ist identisch zu der
> manuellen Eingabe oben, allerdings mit den Anführungsstrichen zwischen
> den Objekten.
> Ich denke da liegt das Problem

Und du bist sicher, dass du meine Aenderungsempfehlung von vorhin auch 
wirklich umgesetzt hast?
Webhipster schrieb:
>
1
>   werte.push({'x': Zeit[i], 'y': Abstand[i]});
2
>

FloB schrieb:
> Das Date Format funktioniert sonst einwandfrei und er sieht die
> date-Werte auch als solche an und ordnet sie zeitlich richtig ein.
Auch bei ungleich langen Intervallen? Nunja, vielleicht parst die Lib 
wirklich alles, was wie ein Timestamp aussieht.
Gast #6318842
Lesenswert?

Webhipster schrieb:
> Auch bei ungleich langen Intervallen? Nunja, vielleicht parst die Lib
> wirklich alles, was wie ein Timestamp aussieht.

Das tatsächlich. Ich hatte das vor ein paar Wochen schon genauer 
probiert, aber der macht das perfekt, auch mit unterschiedlichen 
Intervallen.


Webhipster schrieb:
> werte.push({'x': Zeit[i], 'y': Abstand[i]});

Ich probiere das gerade noch. Ich bekomme zwar keinen Fehler, aber es 
wird auch kein Graph angezeigt. Ich weiß noch nicht ganz wieso, probiere 
noch aus
Gast #6318843
Lesenswert?

Du scheinst ein Verständnisproblem zu haben, was ein String, und was 
Objekte und sonstige Datentypen sind. Ein Objekt ist kein String, ein 
String ist kein Objekt. Eine Konsole kann dir kein Objekt zeigen, es 
muss dieses in eine für Menschen verständliche repräsentation umwandeln. 
Das Array  Objekt  etc. ist nicht wirklich eine Abfolge der Zeichen, 
die du da siehst.
Gast #6318845
Lesenswert?

Webhipster schrieb:
> Und du bist sicher, dass du meine Aenderungsempfehlung von vorhin auch
> wirklich umgesetzt hast?
> Webhipster schrieb:
>>>   werte.push({'x': Zeit[i], 'y': Abstand[i]});
>>

Ich hatte einen Schreibfehler darin...
Es funktioniert damit!!

Ich danke Dir vielmals! Auch noch um diese Uhrzeit ;)
Oh man..
Gast #6318847
Lesenswert?

DPA schrieb:
> Du scheinst ein Verständnisproblem zu haben

Ja das ist auch nicht ausgeschlossen. Ich bin in der Welt von Javascript 
und PHP etc. noch recht neu und hab da noch nicht alles so richtig 
verstanden. Aber ich arbeite daran :/

Ich habe hier aber jetzt verstanden was falsch war, beim ersellen meines 
Array. Hoffe ich :P
Gast #6319027
Lesenswert?

FloB schrieb:
> var content = [5, 4, 8, 8, 6, 2, 4, 4];  //<-- Länge = 8
>
> //test erhält hier so viele Objekte, wie content lang ist
> var test = [];
>     for (var i in content) {
>     test.push(i);
> }
>
> die Ausgabe von test:
> [ "0", "1", "2", "3", "4", "5", "6", "7" ]
>
> An sich klappt alles. Der Code dient auch eher zum Zeigen.
> Doch kann ich es irgendwie verhindern, dass Javascript bei der Ausgabe
> bzw. weiteren Nutzung von Arrays, die mit z.B. for-Schleifen entstehen
> und somit variabel sind, diese "" vor und nach jedem Objekt setzt?

Du bist völlig auf dem Holzweg. Dein Fehler fängt viel früher an:

Mit einer "for (var x in y)" iterierst Du über die Keys 
(Schlüssel) eines Objektes. Die Keys eines Objektes sind immer 
Strings (oder Symbole).

Was Du aber vermutlich willst, ist über die Werte des Arrays iterieren. 
Also musst Du "for (var x of y) schreiben.

Dann bekommst Du auch an keinen komischen Stellen Strings, wo Du es 
nicht erwartest.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren