根据Array元素设置Global值

时间:2016-08-30 13:18:19

标签: javascript arrays

我有一个javascript数组如下,并尝试循环它并根据数组值分配一个全局值。

var arrayData = [3, 5, 8, 11, 18, 20, 24, 25]

当页面加载时,我分配了#34; a"值应为3和" b"值应为5.它们是0th and 1st elements

的数组。

加载页面5秒钟后(b值)" a"值应更改为8(arrayData[2])和" b"值应更改为10(arrayData[3])。同样,在加载页面11秒(b值)后," a"值应更改为18(arrayData[4])和" b"值应更改为20(arrayData[5])。

为此,我正在尝试以下setInterval函数代码,

        <script type="text/javascript">

            var seconds = new Date().getTime() / 1000;

            var arrayData = [3, 5, 8, 11, 18, 20, 24, 25]
            var a = arrayData[0];
            var b = arrayData[1]

            window.setInterval(function(){
                console.log("B val : "+b+ " A val : "+a)
                if(((new Date().getTime() / 1000)- seconds) >= b) {
                    for (var i = 2; i < arrayData.length; i+=2){
                        a = arrayData[i];
                        b = arrayData[i+1];             
                    }                   
               }
             }, 100);

        </script>

但&#34; a&#34;值最初分配3,然后仅分配24。不与其他奇怪的元素。还&#34; b&#34;值仅分配为5和25。

我的日志显示如下,

    B val : 5 A val : 3
    B val : 5 A val : 3
    B val : 5 A val : 3
    B val : 5 A val : 3
    B val : 5 A val : 3
    B val : 25 A val : 24
    B val : 25 A val : 24
    B val : 25 A val : 24
    B val : 25 A val : 24
    B val : 25 A val : 24

任何人都可以提供协助。

3 个答案:

答案 0 :(得分:0)

使用Array.prototype.shift功能。 (试试JSFiddle

var seconds = new Date().getTime() / 1000;
var arrayData = [3, 5, 8, 11, 18, 20, 24, 25];
var a = arrayData.shift();
var b = arrayData.shift();

window.setInterval(function() {
  console.log("B val : " + b + " A val : " + a)
  if(((new Date().getTime() / 1000) - seconds) >= b) {
    a = arrayData.shift();
    b = arrayData.shift();
    seconds = new Date().getTime() / 1000;
  }
}, 100);

答案 1 :(得分:0)

if语句

if(((new Date().getTime() / 1000)- seconds) >= b)

仅在大约5秒钟后才会生效( b 的初始值),所以在前5秒,ab保持不变;但是,一旦if语句变为现实,您的ab将在for语句中发生变化;最后,他们分别成为2425

答案 2 :(得分:0)

你可能喜欢这样; (为了更快的演示,我只做了100毫秒而不是1000毫秒)

var  a,b,
arrayData = [3, 5, 8, 11, 18, 20, 24, 25];

function updateGlobals(arr){
  a = arr[0] || a;
  b = arr[1] || b;
  arr.length >= 2 && setTimeout(updateGlobals,arr[1]*100,arr.slice(2));
  console.log(a,b);
}

updateGlobals(arrayData);