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

时间:2012-05-13 17:47:09

标签: 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++) {
                        A[n] = new Array.apply(this, args);
                    }
                }



                alert (A);  

1 个答案:

答案 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;
    }
}

http://jsfiddle.net/zGhnv/

>[["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)