Javascript 使用prototype.slice.call定义动态二维数组

Javascript 使用prototype.slice.call定义动态二维数组,javascript,Javascript,我尝试使用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++) {

我尝试使用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);  
var A=新数组(k);
如果(k>1){
var args=Array.prototype.slice.call(k,1);
对于(var n=0;n
.slice()
是错误的工具。它用于制作另一个阵列或阵列的一部分的浅克隆

如果您正在寻找一个正方形结构,您只需要使用两个嵌套的循环来创建外部和内部数组

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;
    }
}
var k=10;
var a=[];
对于(变量i=0;i

>[["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"]] 请注意,我实际上不需要声明数组的初始长度。我可以根据需要向每个数组添加成员


如果你想提前声明长度,你可以用
新数组(k)
替换
[]

我还不清楚你在这里想要实现什么。值
k
是否始终为整数,表示二维数组在两个维度中的大小?或者是您要在新数组中以二维形式复制的现有数组?这是一个由userworks插入的整数非常感谢,但我在上面的示例中是否做错了?长度并不意味着jack。@user1295369:This:
array.prototype.slice.call(k,1)正在从数字的上下文调用
.slice()
。因为没有数组可以开始,所以不需要
.slice()
。然后您成功地在主数组中创建了
k
数组,但没有用任何东西填充它们。不确定这是否是你想要的。如果没有,你就去掉了内部循环。此行:
A[n]=新数组。应用(This,args)
实际上应该可以工作,但是创建数组是一种冗长而笨拙的方法。@Zirak:是的,只是为了“清晰”(即使它有歧义),可能需要它,然后使用
.length
属性作为循环的边界。但是,是的,正如我所说的,一开始你不需要申报。我现在意识到我做错了什么,非常感谢。你的方法更符合逻辑和正确。我会用的。 >[["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"]]