如何将var []转换为bidimensional var

时间:2016-01-03 02:10:01

标签: javascript arrays algorithm jsp

这是一个非常复杂和复杂的解释,无论如何,我会试着解释我的问题。我在JSP页面中有以下脚本:

<script>
     var matrix = [];
     <% String lengthStr = (configuration.getLength())+(configuration.getWidth());

     //configuration is an object that is passed as a parameter to the JSP, including information about the size.

     int length = Integer.parseInt(lengthStr); %>
     for (var i = 0; i < <%= length %>; i++) {
        matrix.push(0);
     }
     // set the hidden field on init
     $('#matrix').val(JSON.stringify(matrix));
     $('input[type="button"]').on('click', function(evt) {
                    var me = $(this);
                    var idx = +me.attr('id'); // the + sign turns this value to a number
                    if (matrix[idx] === 0) {
                        matrix[idx] = 1;
                        me.addClass('AreaBlocked');
                    } else {
                        matrix[idx] = 0;
                        me.removeClass('AreaBlocked');
                    }
                // update the hidden field every time a user clicks something
                $('#matrix').val(JSON.stringify(matrix));
      });
</script>

此脚本创建一维向量,该向量将每个位置与按钮的id相关联。每次按下按钮时,它都会改变颜色,并且改变与按钮对应的位置(在数组“矩阵”中)的值。如果再次按下该按钮,则会恢复该按钮。

这是与按钮生成相关的部分:

<table>
                <%
                    int length= Integer.parseInt(configuration.getLength());
                    int width= Integer.parseInt(configuration.getWidth());

                   for(int i = 1; i <= length; i++){

                       String iChar = Integer.toString(i);
                       %>
                       <tr>
                       <%    
                       for(int j = 1; j <= width; j++){
                           String jChar = Integer.toString(j);
                           String idChar = iChar+jChar;
                       %>
                       <td><input type="button" class="AreaFree" id="<%=idChar %>"></td>
                      <%
                       }
                      %>
                      </tr>
                      <%
                   }
                %>
                </table>

                <br>
                <input type="submit" value="Continue" class="MyButton">
                <input type="hidden" id="matrix" name="matrix" value="" />

每按一次按钮,矩阵“id”位置的值就会改变;当我按下“继续”提交按钮时,var“matrix”被发送到servlet并转换为带有对象Gson的int []数组。 现在真正的问题是:我可以使用二维数组而不是一维向量,维持算法的逻辑吗?如果可能的话,您能否与我分享代码,并为此目的进行必要的更改?

1 个答案:

答案 0 :(得分:0)

在Javascript Arrays中associative arrays。这意味着它们是(键,值)对的集合。

所以,如果你定义一个数组mat=[],然后分配它的第一个元素mat[0]=[],那么它就变成了一个包含1行0列的2D数组。

您可以添加所需的行数,并且对行的限制没有相同的长度。

以下是给定给定尺寸的2D矩阵的代码。 convert1Dto2D将1D数组转换为2D数组。

function get2DArray(row, col) {
    var mat;
    row = +row;
    col = +col;

    if( isNaN(row) || isNaN(col) || row < 0 || col < 0) {
        mat == undefined;
    }
    if(row == 0) {
    }
    mat = [];
    for(var i = 0; i < row; i++) {
        mat[i] = [];
        mat[i].length = col;
    }

    return mat;
}

function convert1Dto2D(arr, row, col) {
    var mat = get2DArray(row,col);
    var matI = 0; matJ = 0;
    for(var i = 0; i < arr.length; i++) {
        matI = Math.floor(i/col);
        matJ = Math.floor(i%col);
        console.log(i + " : " + matI + " : "+  matJ);
        mat[matI][matJ] = arr[i];
    }
    return mat;
}