Javascript JS:for带暂停的循环
当满足某个条件时,如何使循环暂停?在下面的示例中,循环仅一次显示所有值,而我希望它在遇到特定值时停止,例如2:Javascript JS:for带暂停的循环,javascript,for-loop,conditional,Javascript,For Loop,Conditional,当满足某个条件时,如何使循环暂停?在下面的示例中,循环仅一次显示所有值,而我希望它在遇到特定值时停止,例如2: a = [1,1,1,2,1,1,1,3,4,2,1] for (var i = 0; i < a.length; i++) { if(a[i] == 2){ setTimeout(console.log(a[i]), 1000) }else{ console.log(a[i]); } }; 正如其他人所说,JavaScr
a = [1,1,1,2,1,1,1,3,4,2,1]
for (var i = 0; i < a.length; i++) {
if(a[i] == 2){
setTimeout(console.log(a[i]), 1000)
}else{
console.log(a[i]);
}
};
正如其他人所说,JavaScript中没有停顿。下面是一个异步循环的示例
(function() {
var a = [1,1,1,2,1,1,1,3,4,2,1];
var i = 0;
var length = a.length;
function iteration() {
if (i == length) return;
console.log(a[i]);
if(a[i] == 2){
setTimeout(iteration, 1000);
}else{
setTimeout(iteration, 0);
}
i++;
};
iteration();
}());
您不能直接执行此操作,但可以按如下方式进行模拟您可以在此处测试代码:
我真的不知道你为什么想要实现这个,但是如果你想要实现这个,你需要一个调用自身的函数:
function myLoop(index){
index = index || 0;
a = [1,1,1,2,1,1,1,3,4,2,1]
for (var i = index; i < a.length; i++) {
if(a[i] == 2){
setTimeout(function(){
console.log(a[i]);
myLoop(++i)
}, 1000)
break;
}else{
console.log(a[i]);
}
};
}
myLoop()
小提琴:
下面创建的函数包含3个参数、一个数组、以毫秒为单位的暂停时间和暂停内容。在函数内部,它将创建一个私有函数,用于在数组上循环。如果遇到pauseOn值,则使用setTimeout在指定的pauseTime之后调用循环函数
var arr = [1,1,1,2,1,1,1,3,4,2,1];
function iterateArray(arr,pauseTime,pauseOn){
var currentIndex=0;
function loop(){
for(i=currentIndex;i<arr.length; i++){
console.log(arr[i]);
if(arr[i]==pauseOn){
currentIndex = i+1;
setTimeout(loop,pauseTime);
return;
}
}
}
loop();
}
iterateArray(arr,3000,2);
javascript没有暂停功能,您需要重构代码以使用setTimeout和setup变量来标记何时暂停和何时继续等。在重构过程中,您可能希望在函数上方设置i的范围,以便在多个invocationsTrigger调试器之间共享;?你想通过暂停来实现什么?不同的目标需要不同的方法。setTimeout的参数是要调用的函数或要计算的字符串。将console.log放在那里会立即调用它,而不是在超时之后。这里有一个选项,可以更自定义何时暂停以及暂停多少:
var a = [1, 1, 2, 3, 1, 1, 2, 3];
function pauseOnTwo(arr) {
if (arr.length > 1) {
var slice = arr.shift();
if (slice === 2) {
setTimeout(function () {
console.log('found a two! ' + slice);
pauseOnTwo(arr);
}, 1000);
} else {
console.log('its not 2: ', slice);
pauseOnTwo(arr);
}
} else {
if (arr[0] === 2) {
setTimeout(function () {
console.log('found a two! ' + slice);
});
}
}
}
pauseOnTwo(a);
var arr = [1,1,1,2,1,1,1,3,4,2,1];
function iterateArray(arr,pauseTime,pauseOn){
var currentIndex=0;
function loop(){
for(i=currentIndex;i<arr.length; i++){
console.log(arr[i]);
if(arr[i]==pauseOn){
currentIndex = i+1;
setTimeout(loop,pauseTime);
return;
}
}
}
loop();
}
iterateArray(arr,3000,2);