NEWS
Zeiten filtern Array
-
hier mal eine superkompakte version
wenn der wert gleich ist, wird immer das erste element genommenlet [value,hour] = arr.reduce((acc,val)=>val[0]<acc[0]?val:acc); console.log(value); console.log(hour);
-
@diamand2k22 sagte: geringsten Preis und die volle Stunde mit dem geringsten Preis
const arr = [ [ 0.2425, '03:00', '03:30' ], [ 0.2425, '03:30', '04:00' ], [ 0.2434, '02:00', '02:30' ], [ 0.2434, '02:30', '03:00' ], [ 0.2492, '04:00', '04:30' ] ]; const idPrice = ''; // ID eintragen const idHour = ''; // ID eintragen let minPrice = 99; let hour = 24; for(const ele of arr) { if(ele[0] < minPrice) { minPrice = ele[0]; hour = parseInt(ele[1]); } }; setState(idPrice, minPrice, true); setState(idHour, hour, true);
-
danke dir klappt soweit. Wie kann ich am einfachsten in Java umsetzen, dass er den Datenpunkt nur beschreibt, wenn sich der Wert minPrice und hour ändern?
-
Hallo @paul53, kannst du mir nochmal helfen mit meiner Zeitfilterung.
die Funktion sieht aktuell so aus:
async function filterZeitVonXXToXX(arrZeit, zeit1, zeit2) { const newArray = []; // console.warn(JSON.stringify(arrZeit)); for (let i = 0; i < arrZeit.length; i++) { const startTime = parseInt(arrZeit[i][1].split(':')[0]); if(startTime <= zeit1.split(':')[0] || startTime >= zeit2.split(':')[0]) newArray.push(arrZeit[i]); if (startTime == zeit1.split(':')[0]) { break; } } // console.warn(JSON.stringify(newArray)); newArray.sort(function (a, b) { // niedrieg preis sort return b[0] - a[0]; }); //console.warn(JSON.stringify(newArray)); return newArray; }
dabei ist arrZeit das Array mit den Zeiten und Preisen wie oben beschrieben.
zeit 1 würde z.B. 9:00 Uhr sein
zeit 2 ist die aktuelle Zeit z.B. 21:00Uhrjetzt sollen als return nur die Zeiten zwischen 21:00 Uhr und 9:00 Uhr ausgegeben werden.
Bis 0:00 Uhr funktioniert das ganze, nach 0:00 schreibt er mir auch die Zeiten nach 9:00 Uhr ins Array.Hast du ne idee?
-
@diamand2k22 sagte: Zeiten nach 9:00 Uhr ins Array.
Versuche es mal mit Zahlen:
if(startTime <= parseInt(zeit1) || startTime >= parseInt(zeit2)) newArray.push(arrZeit[i]);
-
Hallo Paul,
habs mal getestet, aber immer noch selbes Problem.
hier mein Test ArraytibberPoiAll = [[0.3659,"18:00","18:30"],[0.3659,"18:30","19:00"],[0.3657,"17:00","17:30"],[0.3657,"17:30","18:00"],[0.3631,"19:00","19:30"],[0.3631,"19:30","20:00"],[0.3559,"16:00","16:30"],[0.3559,"16:30","17:00"],[0.3553,"20:00","20:30"],[0.3553,"20:30","21:00"],[0.3486,"22:00","22:30"],[0.3486,"22:30","23:00"],[0.3454,"21:00","21:30"],[0.3454,"21:30","22:00"],[0.3433,"08:00","08:30"],[0.3408,"23:00","23:30"],[0.3408,"23:30","00:00"],[0.3356,"07:00","07:30"],[0.3356,"07:30","08:00"],[0.3232,"00:00","00:30"],[0.3232,"00:30","01:00"],[0.3194,"06:00","06:30"],[0.3194,"06:30","07:00"],[0.3148,"05:00","05:30"],[0.3148,"05:30","06:00"],[0.3147,"01:00","01:30"],[0.3147,"01:30","02:00"],[0.3142,"02:00","02:30"],[0.3142,"02:30","03:00"],[0.3097,"04:00","04:30"],[0.3097,"04:30","05:00"],[0.3083,"03:00","03:30"],[0.3083,"03:30","04:00"]] tibberPoihigh = await filterZeitVonXXToXX(tibberPoiAll, '09:00', '01:00');
rauskommen tut dabei
[ [ 0.3659, '18:00', '18:30' ], [ 0.3659, '18:30', '19:00' ], [ 0.3657, '17:00', '17:30' ], [ 0.3657, '17:30', '18:00' ], [ 0.3631, '19:00', '19:30' ], [ 0.3631, '19:30', '20:00' ], [ 0.3559, '16:00', '16:30' ], [ 0.3559, '16:30', '17:00' ], [ 0.3553, '20:00', '20:30' ], [ 0.3553, '20:30', '21:00' ], [ 0.3486, '22:00', '22:30' ], [ 0.3486, '22:30', '23:00' ], [ 0.3454, '21:00', '21:30' ], [ 0.3454, '21:30', '22:00' ], [ 0.3433, '08:00', '08:30' ], [ 0.3408, '23:00', '23:30' ], [ 0.3408, '23:30', '00:00' ], [ 0.3356, '07:00', '07:30' ], [ 0.3356, '07:30', '08:00' ], [ 0.3232, '00:00', '00:30' ], [ 0.3232, '00:30', '01:00' ], [ 0.3194, '06:00', '06:30' ], [ 0.3194, '06:30', '07:00' ], [ 0.3148, '05:00', '05:30' ], [ 0.3148, '05:30', '06:00' ], [ 0.3147, '01:00', '01:30' ], [ 0.3147, '01:30', '02:00' ], [ 0.3142, '02:00', '02:30' ], [ 0.3142, '02:30', '03:00' ], [ 0.3097, '04:00', '04:30' ], [ 0.3097, '04:30', '05:00' ], [ 0.3083, '03:00', '03:30' ], [ 0.3083, '03:30', '04:00' ] ]
wenn ich die Zeit vor 0 Uhr rein nehme, wird richtig gefiltert, also in dem Fall von 21:00 Uhr bis 9:00 Uhr
tibberPoihigh = await filterZeitVonXXToXX(tibberPoiAll, '09:00', '21:00');
Ausgabe:
[ [ 0.3486, '22:00', '22:30' ], [ 0.3486, '22:30', '23:00' ], [ 0.3454, '21:00', '21:30' ], [ 0.3454, '21:30', '22:00' ], [ 0.3433, '08:00', '08:30' ], [ 0.3408, '23:00', '23:30' ], [ 0.3408, '23:30', '00:00' ], [ 0.3356, '07:00', '07:30' ], [ 0.3356, '07:30', '08:00' ], [ 0.3232, '00:00', '00:30' ], [ 0.3232, '00:30', '01:00' ], [ 0.3194, '06:00', '06:30' ], [ 0.3194, '06:30', '07:00' ], [ 0.3148, '05:00', '05:30' ], [ 0.3148, '05:30', '06:00' ], [ 0.3147, '01:00', '01:30' ], [ 0.3147, '01:30', '02:00' ], [ 0.3142, '02:00', '02:30' ], [ 0.3142, '02:30', '03:00' ], [ 0.3097, '04:00', '04:30' ], [ 0.3097, '04:30', '05:00' ], [ 0.3083, '03:00', '03:30' ], [ 0.3083, '03:30', '04:00' ] ]
-
@diamand2k22 sagte: rauskommen tut dabei
Ja, alle Zeiten sind >= 1 (Uhr).
Was soll das Ergebnis sein? -
so sieht der Filter aus: tibberPoihigh = await filterZeitVonXXToXX(tibberPoiAll, _sunup, nowhour);
_sunup = Zeit Sonnenaufgang z.B. 9:00
nowhour ist die aktuelle Zeit z.B. 01:00es sollen jetzt die Zeiten aus dem Array zwischen 1 Uhr und 9 Uhr ausgegeben werden, aber es werden auch die Zeiten nach 9 Uhr ausgegeben.
wie gesagt, wenn nowhour 23:00 ist, dann funktioniert der Filter bis 9:00 Uhr, wenn nowhour nach 0:00 Uhr dann werden auch Zeiten größer 9 Uhr ausgegeben
-
@diamand2k22 sagte: Zeiten aus dem Array zwischen 1 Uhr und 9 Uhr
Versuche es mal so:
if(parseInt(zeit2) > parseInt(zeit1)) { if(startTime <= parseInt(zeit1) || startTime >= parseInt(zeit2)) newArray.push(arrZeit[i]); } else { if(startTime <= parseInt(zeit1) && startTime >= parseInt(zeit2)) newArray.push(arrZeit[i]); }
-
ich glaub das war es:
tibberPoihigh = await filterZeitVonXXToXX(tibberPoiAll, '09:00', '01:00');
[ [ 0.3433, '08:00', '08:30' ], [ 0.3356, '07:00', '07:30' ], [ 0.3356, '07:30', '08:00' ], [ 0.3194, '06:00', '06:30' ], [ 0.3194, '06:30', '07:00' ], [ 0.3148, '05:00', '05:30' ], [ 0.3148, '05:30', '06:00' ], [ 0.3147, '01:00', '01:30' ], [ 0.3147, '01:30', '02:00' ], [ 0.3142, '02:00', '02:30' ], [ 0.3142, '02:30', '03:00' ], [ 0.3097, '04:00', '04:30' ], [ 0.3097, '04:30', '05:00' ], [ 0.3083, '03:00', '03:30' ], [ 0.3083, '03:30', '04:00' ] ]
tibberPoihigh = await filterZeitVonXXToXX(tibberPoiAll, '09:00', '21:00');
[ [ 0.3486, '22:00', '22:30' ], [ 0.3486, '22:30', '23:00' ], [ 0.3454, '21:00', '21:30' ], [ 0.3454, '21:30', '22:00' ], [ 0.3433, '08:00', '08:30' ], [ 0.3408, '23:00', '23:30' ], [ 0.3408, '23:30', '00:00' ], [ 0.3356, '07:00', '07:30' ], [ 0.3356, '07:30', '08:00' ], [ 0.3232, '00:00', '00:30' ], [ 0.3232, '00:30', '01:00' ], [ 0.3194, '06:00', '06:30' ], [ 0.3194, '06:30', '07:00' ], [ 0.3148, '05:00', '05:30' ], [ 0.3148, '05:30', '06:00' ], [ 0.3147, '01:00', '01:30' ], [ 0.3147, '01:30', '02:00' ], [ 0.3142, '02:00', '02:30' ], [ 0.3142, '02:30', '03:00' ], [ 0.3097, '04:00', '04:30' ], [ 0.3097, '04:30', '05:00' ], [ 0.3083, '03:00', '03:30' ], [ 0.3083, '03:30', '04:00' ] ]
jetzt sieht's gut aus! vielen Dank für deine Hilfe!
-
@paul53 said in Zeiten filtern Array:
@diamand2k22 sagte: die kleinste Uhrzeit
Das funktioniert z.B. mit einem String-Vergleich.
const arr = [ [ 0.2325, '23:00', '23:30' ], [ 0.2425, '03:00', '03:30' ], [ 0.2425, '03:30', '04:00' ], [ 0.2434, '02:00', '02:30' ], [ 0.2434, '02:30', '03:00' ], [ 0.2492, '04:00', '04:30' ] ]; let first = '23:59'; for(const ele of arr) { if(ele[1] < first) first = ele[1]; }; log(first);
Hallo @paul53, ich habe hier selbiges Problem wie bei dem Skript davor, dass er Zeiten, die vor 00:00 Uhr sind, nicht berücksichtig. Die Variable first ist bei dem Array 00:00, müsste aber 23:00 sein. Kannst du mir kurz helfen?
Danke dir!