2013-04-03 55 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