这是一个非常复杂和复杂的解释,无论如何,我会试着解释我的问题。我在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 []数组。 现在真正的问题是:我可以使用二维数组而不是一维向量,维持算法的逻辑吗?如果可能的话,您能否与我分享代码,并为此目的进行必要的更改?
答案 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;
}