2014-04-21 69 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