2014-04-21 136 views
0

我正在寫一個帶有兩個子函數的函數:一個用於從表單中的兩個值打印二維數組,另一個用於打印出二維數組。在這一點上,我一直試圖使用整數值的變量來填充二維數組,但它們沒有被正確填充。 min變量似乎在函數中的值爲0,而不是正在傳遞的值。在JavaScript中未正確填充和未定義2D陣列

無論如何,我創建二維數組後,我嘗試測試打印二維數組'twoDarray',但它出現未定義?

 function isValid(frm) { 
      var xValue = document.getElementById("X").value; 
      var yValue = document.getElementById("Y").value; 
      if (xValue <= yValue) 
      { 
       /* Draw out the multiplication table. */ 
       function gen2Darray(min, max) 
       { 
        var lengthOf2Darray = (max - min);    
        var twoDarray = new Array(lengthOf2Darray); 
        for (var i = 0; i < lengthOf2Darray; i++) 
        { 
         twoDarray[i] = new Array(lengthOf2Darray); 
         for (var j = 0; j < lengthOf2Darray; j++) 
         { 
          twoDarray[i][j] = ((min + i) * (min + j)); // only takes i 
         } 
        } 
       } 
       gen2Darray(xValue, yValue); 

       function print_2d_string_array (array) 
       { 
        // print twoDarray, but twoDarray undefined here      
       } 

我已經創建了一個的jsfiddle帳戶,但它不工作的網站上以同樣的方式:http://jsfiddle.net/imparante/5yTEv/

修復:

function isValid(frm) { 
    var xValue = document.getElementById("X").value; 
    var yValue = document.getElementById("Y").value; 
    var lengthOf2Darray = (yValue - xValue); 
    var twoDarray = new Array(lengthOf2Darray); 

    if (xValue <= yValue) { 
     /* Draw out the multiplication table. */ 
     function gen2Darray(min, max) { 
      //      var lengthOf2Darray = (max - min);    
      //      var twoDarray = new Array(lengthOf2Darray); 
      for (var i = 0; i < lengthOf2Darray; i++) { 
       twoDarray[i] = new Array(lengthOf2Darray); 
       for (var j = 0; j < lengthOf2Darray; j++) { 
        twoDarray[i][j] = ((min + i) * (min + j)); 
        $("#table").append(twoDarray[i][j] + " "); 
       } 
      } 
      return twoDarray; 
     } 
     gen2Darray(xValue, yValue); 

     function print_2d_string_array(array){ 
      // print twoDarray 
     } 
+0

你可以創建你有問題的小提琴,上面的代碼是不完整的,我們需要的HTML,以及整個javascript函數。 – logikal

+0

嚴格模式下不允許條件內的函數聲明,而非嚴格模式下的函數聲明可能會在不同的瀏覽器中產生不同的結果。 – Oriol

回答

2

由於數組是在gen2Darray()內聲明和創建的,因此您在twoDarray上未定義,但您試圖從print_2d_string_array()訪問它。

如果您將您的var twoDarray = new Array();移動到您的xValueyValue聲明,應該解決未定義的錯誤。

Bin example

function isValid(frm) { 
    var xValue = document.getElementById("X").value; 
    var yValue = document.getElementById("Y").value; 
    var lengthOf2Darray; 
    var twoDarray = []; 

    if (xValue <= yValue){ 
     /* Draw out the multiplication table. */ 
     gen2Darray(xValue, yValue); 
     print_2d_string_array(twoDarray); 
    } 

    function gen2Darray(min, max){ 
     lengthOf2Darray = (max - min);    
     twoDarray = [lengthOf2Darray]; 
     for (var i = 0; i < lengthOf2Darray; i++){ 
      twoDarray[i] = new Array(lengthOf2Darray); 
      for (var j = 0; j < lengthOf2Darray; j++){ 
       twoDarray[i][j] = ((min + i) * (min + j)); // only takes i 
      } 
     } 
    } 

    function print_2d_string_array(array){ 
     console.log(array); 
    } 
} 
0

的職能declarating是有點不對勁,且功能gen2Darray實際上並沒有返回任何東西,所以變量twoDarray只會在函數範圍內使用。

請參閱固定的代碼在這裏:http://jsfiddle.net/CC5vP/

我感動的兩個功能從主函數聲明,然後加入gen2Darray(min, max)

這似乎是工作的一個回報,你會想修改print_2d_string_array(a)到顯示數據而不是將其記錄到控制檯。

+0

這裏最好包含固定代碼。 – Oriol