创建一个自动填充的javascript数组

时间:2014-12-18 08:09:27

标签: javascript jquery arrays

我想在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);
    }

3 个答案:

答案 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()

相关问题