[英]Javascript (Typescript): for loop not working properly
我在Ionic 2中工作,并且试图建立一个for循环以显示某些数据。 但是它的表现很奇怪。
我目前有一个使用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
]
如果我要输出的dateArray
等this.timeString = dateArray.join(",");
并在我的html中显示timeString
,我可以看到以下值:
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
现在,我遍历数组,并尝试获得两个最大值。 我试图显示一个字符串,就像我在上面的注释中一样。 如果是过去的话,我只想显示最大的价值。
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++
}
}
此循环遍历每个数组项,并且应捕获不为0
的第一个数组项。 如果它大于0,则该事件将在将来发生,并且我想捕获该数字和下一个(如果下一个为零,请找到下一个,我将很快升级此部分)。
这是问题
出于某种原因,它跳过hours
的阵列的一部分,当小时数最多。 从上面举第二个例子: 0, 0, 0, 10, 7, 47
。 我所看到的是7 minutes and 47 seconds
,应该读10 hours and 7 minutes
。
有什么想法为什么会这样?
万一您想问问,这里是typeOfType
函数:
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;
}
这是因为代码中的else
语句正在使计数器i
递增,并且导致循环在到达0
时跳过数组中的下一项。 这就是为什么在0
之后跳过10
原因。 删除该部分,它应该可以工作。
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 {
//do nothing... let the loop to go on.
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.