NEWS
UNSOLVED Array vielleicht?
-
Hallo zusammen,
ich habe mal wieder ein Problem, dass ich allein nicht lösen kann.
ich habe ein JSON aus dem ich ein paar Zeiten hole (naja, sind ja noch keine richtigen Zeiten :shock: ).
Hier mal das Beispiel. Das JSON ist wegen der "Übersichtlichkeit" eingekürzt.
var body = '{"testJSON":{"state":{"noonTime":[1,50],"eveningTime":[2,45],"tomorrowTime":[12,30]}}}'; var obj = JSON.parse(body); for (i=0; i<(Object.keys(obj).length); i++){ log(obj[Object.keys(obj)[i]].state.noonTime); log(obj[Object.keys(obj)[i]].state.eveningTime); log(obj[Object.keys(obj)[i]].state.tomorrowTime); var noonTime_hh = obj[Object.keys(obj)[i]].state.noonTime[0]; var noonTime_mm = obj[Object.keys(obj)[i]].state.noonTime[1]; var noonTime = ((noonTime_hh > 9) ? noonTime_hh = noonTime_hh : noonTime_hh = '0' + noonTime_hh) + ':' + ((noonTime_mm > 9) ? noonTime_mm = noonTime_mm : noonTime_mm = '0' + noonTime_mm); log(noonTime); }
Nun habe ich den unteren Teil für jede einzelne Zeit geschrieben. Das sind bei 10 Zeiten im JSON viel Code. Ich wollte aufräumen und einkürzen, da dachte ich "man kann sicher zusammen fassen". Ich hatte ein Array im Kopf, bekomme es aber nicht hin.
Frage: wie kann ich das "rote" variabel machen?
var noonTime_hh = obj[Object.keys(obj)_~~[i]~~].state.noonTime[0]; var noonTime_mm = obj[Object.keys(obj)_~~[i]~~].state.noonTime[1];
Grüße, Lenny__
-
Keiner ne Idee wie ich das anstellen könnte?
-
@Lenny-CB said in Array vielleicht?:
Es ist nicht ganz klar, was bei dir nicht funktioniert, weil dein Code sieht schon OK aus, (außer, dass sehr ineffektiv)var body = '{"testJSON":{"state":{"noonTime":[1,50],"eveningTime":[2,45],"tomorrowTime":[12,30]}}}'; var obj = JSON.parse(body); const padding = num => num > 9 ? num : '0' + num; Object.keys(obj).forEach(attr => { const state = obj[attr].state; console.log(state.noonTime); console.log(state.eveningTime); console.log(state.tomorrowTime); console.log(`${padding(state.noonTime[0])}:${padding(state.noonTime[1])}`); console.log(`${padding(state.eveningTime[0])}:${padding(state.eveningTime[1])}`); console.log(`${padding(state.tomorrowTime[0])}:${padding(state.tomorrowTime[1])}`); });
-
Versuche es mal so:
var body = '{"testJSON":{"state":{"noonTime":[1,50],"eveningTime":[2,45],"tomorrowTime":[12,30]}}}'; var obj = JSON.parse(body).testJSON.state; var keys = Object.keys(obj); var vals = Object.values(obj); for(let i = 0; i < keys.length; i++) { var h = vals[i][0]; if(h < 10) h = '0' + h; var m = vals[i][1]; if(m < 10) m = '0' + m; log(keys[i] + ' ' + h + ':' + m); }
-
@paul53 said in Array vielleicht?:
Versuche es mal so:
Oder wenn
Object.values
nicht existiert (Node < 8), dann so:// ... for(let i = 0; i < keys.length; i++) { var h = obj[keys[i]][0]; // ... }
-
ich probiere...
-
@Bluefox: Es ist nicht ganz klar, was bei dir nicht funktioniert, weil dein Code sieht schon OK aus,
also dein Code geht schon mal und verkürzt meinen pro Zeit auf 3 Codezeilen.
was wollte ich machen:
Zeile1: Stunden abfragen
Zeile2: Minuten abfragen
Zeile3: Zeit zusammenfassen und bei Einstelligkeit eine "0" davornun habe ich dennoch bei ca. 10 Zeiten 10 mal die Code-Zeile:
console.log(`${padding(state.noonTime[0])}:${padding(state.noonTime[1])}`);
ich hatte halt gedacht, das man das nur einmal variabel schreiben braucht, etwa wie:
console.log(`${padding(state.[j][0])}:${padding(state.[j][1])}`);
das [j] soll finden: noonTime, eveningTime, tomorrowTime
und das [0] bzw. [1] die Stunden/Minuten
Muss dann natürlich noch die entsprechende for-Schleife rein.@Bluefox: (außer, dass sehr ineffektiv)
kannst du das mal verdeutlichen?
-
@Lenny-CB @AlCalzone hat schon den richtigen code gepostet:
var body = '{"testJSON":{"state":{"noonTime":[1,50],"eveningTime":[2,45],"tomorrowTime":[12,30]}}}'; var obj = JSON.parse(body); const padding = num => num > 9 ? num : '0' + num; Object.keys(obj).forEach(attr => { const state = obj[attr].state; Object.keys(state).forEach(name => console.log(`${name} - ${padding(state[name][0])}:${padding(state[name][1])}`)); });
außer, dass sehr ineffektiv
Du liest 6 mal
Object.keys(obj)
und davon 5 mal im Zyklus.