无法使用setInterval将多维数组中的数组传递给其他函数

时间:2014-03-04 12:21:39

标签: javascript multidimensional-array

我有一个名为“thisIsMyContainerArray”的多维数组,它包含另外两个数组的内容。
我要做的是检查“thisIsMyContainerArray”数组中的每个项目,并在控制台中分别记录该数组中的每个项目(在本例中为另外两个数组),并且每隔5秒执行一次。

到目前为止,我有以下代码:

var thisIsMyContainerArray = new Array();
var thisIsMyArray1 = new Array('val1', 'val2', 'val3', 'val4');
var thisIsMyArray2 = new Array('valA', 'valB', 'valC', 'valD');
thisIsMyContainerArray.push(thisIsMyArray1, thisIsMyArray2);
for (var i = 0; i < thisIsMyContainerArray.length; i++) {
    var t1 = setInterval(tester,5000);
    function tester() {
        console.log(thisIsMyContainerArray[i]);
    }
}

我总是每隔5秒在我的控制台中获得以下输出:

["val1", "val2", "val3", "val4"]
["val1", "val2", "val3", "val4"] 

这是我想要的结果,我需要在控制台中看到这个,而不是我之前提到的输出:

["val1", "val2", "val3", "val4"]
["valA", "valB", "valC", "valD"] 

任何帮助都会受到高度赞赏,因为我已经被困在这几个小时了,我只是想不出来。 :(我尝试将它传递给测试器功能,但结果却是“未定义”。

2 个答案:

答案 0 :(得分:1)

如果我在干净的环境中测试此代码,它的所有输出都是undefined,因此可能是因为i变量未传递,也不包含在闭包范围内。基本上,全局命名空间中的某个i变量设置为0,这是使用的变量。

另外,我不确定你是否对t1变量做了更多,但是它在每个循环都被重置,所以你会得到流氓间隔。


如果记录完毕,我会这样做:

var thisIsMyContainerArray = new Array();
var thisIsMyArray1 = new Array('val1', 'val2', 'val3', 'val4');
var thisIsMyArray2 = new Array('valA', 'valB', 'valC', 'valD');
thisIsMyContainerArray.push(thisIsMyArray1, thisIsMyArray2);
var t1 = setInterval(tester,5000);
function tester() {
    for (var i = 0; i < thisIsMyContainerArray.length; i++) {
        console.log(thisIsMyContainerArray[i]);
    }
}

如果这只是一个简化示例,您需要带有循环的原始结构并为每个数组设置多个间隔,请尝试以下操作:

var thisIsMyContainerArray = new Array();
var thisIsMyArray1 = new Array('val1', 'val2', 'val3', 'val4');
var thisIsMyArray2 = new Array('valA', 'valB', 'valC', 'valD');
thisIsMyContainerArray.push(thisIsMyArray1, thisIsMyArray2);
function tester(index) {
    console.log(thisIsMyContainerArray[index]);
    setTimeout(function() {
        tester(index);
    }, 5000);
}
for (var i = 0; i < thisIsMyContainerArray.length; i++) {
    tester(i);
}

答案 1 :(得分:1)

试试这个 - 如果现在不是这样的话你应该能够正常工作..

var thisIsMyContainerArray = new Array();
var thisIsMyArray1 = new Array('val1', 'val2', 'val3', 'val4');
var thisIsMyArray2 = new Array('valA', 'valB', 'valC', 'valD');
thisIsMyContainerArray.push(thisIsMyArray1, thisIsMyArray2);

var t1 = setInterval(tester,5000);

function tester()
{
   for (var i = 0; i < thisIsMyContainerArray.length; i++) 
   {         
        console.log(thisIsMyContainerArray[i]);          
   }    
}