保存到变量时循环获取上一个数字

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。有什么事吗

Shi*_*rsz 5

如果您查看currentTime,它引用的是Date对象。因此,当您执行下一个代码时:

var previouslySelectedTime = currentTime;
Run Code Online (Sandbox Code Playgroud)

该变量previouslySelectedTime将引用所引用的同一对象currentTime。然后稍后执行:

currentTime.setMinutes(currentTime.getMinutes() + interval);
Run Code Online (Sandbox Code Playgroud)

这将改变双方引用的对象,currentTimepreviouslySelectedTime。一个简单的解决方法是在将新的赋值给所提到的变量之前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)