如果满足某个条件,如何进行循环暂停?在下面的示例中,循环只显示所有值,而我希望它在任何时间跨越特定值(例如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]);
}
};
答案 0 :(得分:0)
正如其他人所说,JavaScript中没有pause
。以下是异步循环的示例;
(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();
}());
答案 1 :(得分:0)
你不能直接做,但你可以按如下方式模拟它(你可以在这里测试代码:http://jsfiddle.net/xSu5J/):
function myLoop(a) {
function showElem(index) {
if (index < a.length) {
var nextWaitTime = (a[index] == 2) ? 1000 : 1; //1000: long period, 1: short period
console.log(a[index]);
setTimeout(function(){showElem(index+1)}, nextWaitTime);
}
}
showElem(0);
}
myLoop([1,1,1,2,1,1,1,3,4,2,1]);
答案 2 :(得分:0)
小提琴:http://jsfiddle.net/Uqr49/
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);
答案 3 :(得分:0)
下面创建一个函数,它接受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);
答案 4 :(得分:-1)
我真的不知道你为什么想要达到这个目标,但是如果你想实现这个目标,你需要一个自称的功能:
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()