我想在javascript中填充两个数组来模拟及时更新图表。 为此我想要填充两个图表。
var array1 = [1,2,3,...] //以秒为单位的时间 var array2 = [10,15,12,...] //任意随机数
应将每个元素推送到具有一秒间隔的数组。
尝试了this,但数组未按我的要求更新。
var time = [];
var value = [];
$(document).ready(function() {
update();
});
function update() {
var index = 0;
setTimeout(function () {
index++;
time.push(index);
value.push(Math.random() * (0 - 200));
console.log(time)
console.log(value)
update();
}, 1000);
}
答案 0 :(得分:3)
<强> fiddle 强>
var index = 0
在每次迭代中都没有更新,因此您需要将其重置为0
。将其移到update()
fn
所以试试:
var index = 0 ; // Outside the update fn scope
var time = [];
var value = [];
$(document).ready( update );
function update() {
setTimeout(function () {
time.push(++index);
value.push( ~~(Math.random() * 200 ) + 1);
console.log(time)
console.log(value)
update();
}, 1000);
}
答案 1 :(得分:1)
您应该将var index = 0;
移到更新功能之外。
var time = [];
var value = [];
$(document).ready(function() {
update();
});
var index = 0;
function update() {
setTimeout(function() {
index++;
time.push(index);
value.push(Math.floor(Math.random() * 200));
console.log(time)
console.log(value)
update();
}, 1000);
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
答案 2 :(得分:1)
您的使用时间setInterval
(几乎与您使用的setTimeout
相同)。
区别是,setTimeout
在指定的超时后运行一次函数,而setInterval
重复运行。
同时检查clearInterval
(将在setInterval
的返回值上运行),这将停止执行该功能。
// to start
var interval = setInterval(function () { /* ... */ }, 1000);
// to stop
clearInterval(interval);
切换函数后,您也不再需要在自身内部调用update()
。