gpt4 book ai didi

JavaScript( typescript ): for loop not working properly

转载 作者:行者123 更新时间:2023-12-03 05:00:54 24 4
gpt4 key购买 nike

我正在 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
]

如果我要输出 dateArraythis.timeString = dateArray.join(","); 并在我的html 中,我可以看到以下值:

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 分 47 秒,而它应该是 10 小时 7 分钟

关于为什么会发生这种情况有什么想法吗?

以防万一您想问,这里是 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,这导致循环在遇到 a 时跳过数组中的下一项。 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.
}
}

关于JavaScript( typescript ): for loop not working properly,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42230718/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com