如果for循环中的语句不起作用,则javascript

时间:2014-03-08 00:34:56

标签: javascript

我有7个变量(秒),我用它们来显示倒计时。所有这些都在同一页面同时倒计时。我想在达到'0'后将它们设置为'59'。我是javascript的新手,很抱歉,如果这是一个愚蠢的问题。

这是我的代码:

s--; s2--; s3--; s4--; s5--; s6--; s7--; 

        var array_s = [s, s2, s3, s4, s5, s6, s7]; 
        for (var i = 0; i < array_s.length; i++) {
            var result = array_s[i];
            if( result < 0) {
                result = 59;
            }
        }

编辑:尝试过这种方式:

var array_s = [s, s2, s3, s4, s5, s6, s7]; 
for (var i = 0; i < array_s.length; i++) {
    if( array_s[i] < 0) {
        array_s[i] = 59;
    }
}

但他们在'0'之后继续倒计时。那么,我的问题在哪里,我做错了什么?

编辑:我编辑了错误的长度

5 个答案:

答案 0 :(得分:2)

您输错了,lenght应为length

答案 1 :(得分:1)

原始类型如'result'不是对数组中索引的引用,它只是值。您需要更新阵列。

if (result < 0)
  array_s[i] = 59

答案 2 :(得分:0)

只是不要将其加载到结果var中,并使用length

var array_s = [s, s2, s3, s4, s5, s6, s7]; 
for (var i = 0; i < array_s.length; i++) {
    if( array_s[i] < 0) {
        array_s[i] = 59;
    }
}

答案 3 :(得分:0)

您将result设置回59,但您永远不会将该值设置回相应的sN变量。单独设置array_s[i]不会像现在这样对您的代码起作用,因为这只会更正数组中的值,而不是sN变量。

我建议完全摆脱sN变量,只使用数组:

// initialize array once
var array_s = [...]; 

...

for (var i = 0; i < array_s.length; i++) {
    var result = array_s[i];
    result--;                // decrement each value
    if(result < 0) {         // check for values < 0
        result = 59;
    }
    array_s[i] = result;     // update values
}

Demonstration

注意:在本演示中,我已经显着加速了计时器,因此您可以轻松地看到值减少到0并重置。此外,重要的是要意识到setIntervalsetTimeout不是特别准确,所以如果你真的需要让你的计时器准确到第二,你可能需要使用另一种方法 - 例如。使用Date个对象。

答案 4 :(得分:0)

是的,您需要更新数组中的变量:
[s, s2, s3, s4, s5, s6, s7] = array_s;
见安迪E的回答:
Unpacking array into separate variables in JavaScript