我有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'之后继续倒计时。那么,我的问题在哪里,我做错了什么?
编辑:我编辑了错误的长度
答案 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
}
注意:在本演示中,我已经显着加速了计时器,因此您可以轻松地看到值减少到0并重置。此外,重要的是要意识到setInterval
和setTimeout
不是特别准确,所以如果你真的需要让你的计时器准确到第二,你可能需要使用另一种方法 - 例如。使用Date
个对象。
答案 4 :(得分:0)
是的,您需要更新数组中的变量:
[s, s2, s3, s4, s5, s6, s7] = array_s;
见安迪E的回答:
Unpacking array into separate variables in JavaScript