2D数组在JavaScript中填充不正确且未定义

2D array improperly filled and undefined in JavaScript

本文关键字:不正确 未定义 填充 数组 JavaScript 2D      更新时间:2023-09-26

我正在编写一个函数,它有两个子函数:一个子函数从表单中的两个值打印2D数组,另一个子函数打印2D数组。在这一点上,我一直在尝试使用具有整数值的变量来填充2D数组,但它们没有正确填充。min变量在函数中的值似乎为0,而不是正在传递的值。

无论如何,在我创建2D阵列后,我试图测试打印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
        }

twoDarray上未定义,因为数组是在gen2Darray()内声明和创建的,但您正试图从print_2d_string_array()访问它。

如果将var twoDarray = new Array();移到xValueyValue声明上,则应解决未定义的错误。

纸盒示例

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);
    }
}

函数的声明有点错误,而且函数gen2Darray实际上没有返回任何内容,因此变量twoDarray只能在函数的作用域中使用。

请在此处查看固定代码:http://jsfiddle.net/CC5vP/

我将这两个函数从主函数声明中移出,然后在gen2Darray(min, max) 中添加了一个返回

它似乎正在工作,您将希望修改print_2d_string_array(a)以显示数据,而不是将其记录到控制台。