pix*_*123 3 javascript arrays jquery datetime loops
在学习JavaScript方面还是一个新手。我想遍历一些值。如果value大于或等于某个数字,则中断循环并获取先前的数字。例如:
var time = [14, 35];
var interval = 40; // in minutes
var startTime = [10, 40];
var timeFormatted = '2019-02-04 '+time[0]+':'+time[1];
var startTimeFormatted = '2019-02-04 '+startTime[0]+':'+startTime[1];
var dtTime = new Date(timeFormatted);
var dtStartTime = new Date(startTimeFormatted);
var currentTime = dtStartTime;
for(i = 0; i < 20; i++) {
var previouslySelectedTime = currentTime;
currentTime.setMinutes(currentTime.getMinutes() + interval);
currentTime = new Date(currentTime);
if(currentTime >= dtTime) {
break;
}
}
alert(previouslySelectedTime);Run Code Online (Sandbox Code Playgroud)
的最终时间结果beforeTime应该是14:00:00但正在显示14:40:00。有什么事吗
如果您查看currentTime,它引用的是Date对象。因此,当您执行下一个代码时:
var previouslySelectedTime = currentTime;
Run Code Online (Sandbox Code Playgroud)
该变量previouslySelectedTime将引用所引用的同一对象currentTime。然后稍后执行:
currentTime.setMinutes(currentTime.getMinutes() + interval);
Run Code Online (Sandbox Code Playgroud)
这将改变双方引用的对象,currentTime和previouslySelectedTime。一个简单的解决方法是在将新的赋值给所提到的变量之前Date从创建一个新的currentTime:
var previouslySelectedTime = new Date(currentTime);
Run Code Online (Sandbox Code Playgroud)
同样,在解决此问题之后,不需要下一行:
currentTime = new Date(currentTime);
Run Code Online (Sandbox Code Playgroud)
例
var previouslySelectedTime = currentTime;
Run Code Online (Sandbox Code Playgroud)
简化版:
而且,如果使用Date()对象提供的方法和while循环,则可以在代码中进行一些简化。
currentTime.setMinutes(currentTime.getMinutes() + interval);
Run Code Online (Sandbox Code Playgroud)