2013-04-03 57 views
1

我必须失去了一些东西基本初始化,但在嵌套循环调用的时候,我差不多就这个查询吸当全球多维数组变量得到了覆盖在多维数组松动范围使用Javascript/JQuery的:在嵌套循环

代码:

//global variable 

line2 = new Array(); 

$.fn.gtest = function(){ 

var values1 = "a,s"; 

    lines = values1.split(','); 
    //First Loop 
    $.each(lines, function(lineNo, line) { 
    //second Loop 
      for(var datavalueNo = 0; datavalueNo < 5; datavalueNo++) { 
         line2[datavalueNo] = new Array(); 
         line2[datavalueNo][lineNo] = new Array(); 
         line2[datavalueNo][lineNo][0] = "Test"; 
         line2[datavalueNo][lineNo][1] = "1"; 
      } 

    }); 

}; 

在第一循环结束LINE2的值是: 试验,1,测试1,测试1,测试1,测试1

在第二循环的值的末尾line2是: ,Test,1,,Test, 1,测试1,测试1,测试1

for循环被调用两次。

从第一次第二次循环(第一次调用for循环)时填充到line2中的所有值都消失了,它仅剩下第二次第二次循环的值(对于第二次调用的循环而言是相同的)。

我希望我能够使我的查询清楚。

+0

这是什么问题?你想达到什么目的? – Adidi 2013-04-03 19:27:39

+0

在你的问题中有几件事不清楚:你的意思是“第一次迭代”和“第二次迭代”? (你是否运行这个函数两次?)当你说“line2的值是...”时,你如何生成这种格式? (根据代码,'line2'是一个数组数组,所以不清楚它如何与你的示例输出相关)。 – IMSoP 2013-04-03 19:33:20

+0

对不起,我只打了一次这个函数。在函数中有两个迭代,在第二次迭代中我的(数组数组)数组被填充,但是当第二次迭代(for循环)被第二次调用时,从先前的迭代中保存的值(for循环被调用第一)被覆盖。我通过在简单的alert()调用中弹出'line2'变量来生成的格式。 – techsurvivor 2013-04-03 19:36:53

回答

0

的原因吗覆盖值是line2[datavalueNo] = new Array();

你必须检查,如果这个变量被前的定义:

//global variable 
    var line2 = []; 
    $.fn.gtest = function(){ 
    var values1 = "a,s", 
     lines = values1.split(','); 
    $.each(lines, function(lineNo, line) { 
     for(var datavalueNo = 0; datavalueNo < 5; datavalueNo++) { 
     if(line2[datavalueNo] === undefined) { 
      line2[datavalueNo] = []; 
     } 
     line2[datavalueNo].push(["Test",1]); 
     } 
    }); 
    }; 

http://jsfiddle.net/qgeqy/

+0

非常感谢。我也在检查,但看起来像我错误地检查它:if(!Object.prototype.toString.call(line2 [datavalueNo])!='[object Array]'){line2 [datavalueNo] = new Array(); } – techsurvivor 2013-04-03 20:13:24