Ich arbeite in Ionic 2 und ich versuche, eine for-Schleife zu machen, um bestimmte Daten zu zeigen. Aber es verhält sich sehr seltsam.Javascript (Typescript): for Schleife funktioniert nicht richtig
Im Moment habe ich eine Reihe von „Restzeit“ mit moment.js
var dur = moment.duration(moment(date).diff(moment()));
let yearsRemain = dur.years();
let monthsRemain = dur.months();
let daysRemain = dur.days();
let hoursRemain = dur.hours();
let minutesRemain = dur.minutes();
let secondsRemain = dur.seconds();
var dateArray = [
yearsRemain,
monthsRemain,
daysRemain,
hoursRemain,
minutesRemain,
secondsRemain
]
Wenn ich die Ausgabe waren die dateArray
wie this.timeString = dateArray.join(",");
und zeigen timeString
in meinem html, kann ich folgende Werte sehen:
0, 0, 0,-17,-46, -3 //17 hours ago
0, 0, 0, 10, 7, 47 //in 10 hours 7 minutes
0, 0, 2, 1, 9, 35 //in 2 days and 1 hour
Jetzt iteriere ich durch das Array und ich versuche, die zwei größten Werte zu erhalten. Ich versuche, eine Zeichenfolge wie in den obigen Kommentaren zu zeigen. Wenn es in der Vergangenheit ist, möchte ich nur den größten Wert anzeigen.
for(var i = 0; i < dateArray.length; i++) {
if(dateArray[i] > 0){
//If the event is in the future
this.state = "future";
this.timePrimary = dateArray[i];
this.timePrimaryType = this.typeOfTime(i, dateArray[i]);
this.timeSecondary = dateArray[i+1] !== 0 ? dateArray[i+1] : dateArray[i+2];
this.timeSecondaryType = dateArray[i+1] !== 0 ? this.typeOfTime(i+1, dateArray[i+1]) : this.typeOfTime(i+2, dateArray[i+2]);
break;
} else if(dateArray[i] < 0) {
//If the event is in the past
this.state = "past";
this.timePrimary = dateArray[i] * (-1);
this.timePrimaryType = this.typeOfTime(i, (dateArray[i] * (-1))) + " ago";
break;
} else {
i++
}
}
Diese Schleife geht durch jedes Element-Array und sollte das erste Array Artikel abzufangen, die kein 0
ist. Wenn es größer als 0 ist, ist das Ereignis in der Zukunft und ich möchte diese Nummer und die nächste erfassen (wenn die nächste Null ist, finde die nächste, werde ich diesen Teil bald aktualisieren).
Hier ist das Problem
Aus irgendeinem Grund ist es das hours
Teil des Arrays Skipping, wenn Stunden die größte Zahl ist. Nehmen Sie das zweite Beispiel von oben: 0, 0, 0, 10, 7, 47
. Alles, was ich sehe, ist 7 minutes and 47 seconds
, wenn es 10 hours and 7 minutes
lesen sollte.
Irgendwelche Ideen, warum das passiert?
Gerade falls Sie wie zu fragen, fühlen, hier ist die typeOfType
Funktion:
typeOfTime(type, num) {
var display;
var plur = num === 1 ? "" : "s";
switch(type) {
case 0:
display = "Year" + plur;
break;
case 1:
display = "Month" + plur;
break;
case 2:
display = "Day" + plur;
break;
case 3:
display = "Hour" + plur;
break;
case 4:
display = "Minute" + plur;
break;
case 5:
display = "Second" + plur;
break;
}
return display;
}
Warum erhöhen Sie "i" am Ende der Schleife? –
@torazaburo Die 'else' Anweisung sagt im Grunde:' Wenn der Wert dieses Array-Elements gleich 0 ist, sehen Sie sich das nächste Array-Element an ' – ntgCleaner
@torazaburo, Ihr Kommentar war tot. Ich hatte den größten Hirnfurz aller Zeiten. Kein Grund, eine Schleife innerhalb einer for-Schleife zu erhöhen ... Danke! – ntgCleaner