我尝试使用prototype.slice.call创建动态二维数组。阵列尺寸根据用户插入的值k而变化。代码如下:
var A = new Array(k);
if (k > 1) {
var args = Array.prototype.slice.call(k, 1);
for (var n = 0; n < k; n++) {
A[n] = new Array.apply(this, args);
}
}
alert (A);
答案 0 :(得分:1)
.slice()
是错误的工具。它用于制作另一个Array的浅层克隆,或者是Array的一部分。
如果您正在寻找方形结构,您只需使用2个嵌套循环来创建外部和内部数组。
var k = 10;
var a = [];
for (var i = 0; i < k; i++) {
a[i] = [];
for (var j = 0; j < k; j++) {
a[i][j] = i + ':' + j;
}
}
>[["0:0","0:1","0:2","0:3","0:4","0:5","0:6","0:7","0:8","0:9"], ["1:0","1:1","1:2","1:3","1:4","1:5","1:6","1:7","1:8","1:9"], ["2:0","2:1","2:2","2:3","2:4","2:5","2:6","2:7","2:8","2:9"], ["3:0","3:1","3:2","3:3","3:4","3:5","3:6","3:7","3:8","3:9"], ["4:0","4:1","4:2","4:3","4:4","4:5","4:6","4:7","4:8","4:9"], ["5:0","5:1","5:2","5:3","5:4","5:5","5:6","5:7","5:8","5:9"], ["6:0","6:1","6:2","6:3","6:4","6:5","6:6","6:7","6:8","6:9"], ["7:0","7:1","7:2","7:3","7:4","7:5","7:6","7:7","7:8","7:9"], ["8:0","8:1","8:2","8:3","8:4","8:5","8:6","8:7","8:8","8:9"], ["9:0","9:1","9:2","9:3","9:4","9:5","9:6","9:7","9:8","9:9"]]
请注意,我真的不需要声明Array的初始长度。我可以根据需要为每个数组添加成员。
如果您想预先声明长度,可以将[]
替换为new Array(k)
。