在JavaScript中生成N维数组

在JavaScript中生成N维数组,javascript,arrays,Javascript,Arrays,下面的代码将生成10个阵列,每个阵列有10个子阵列,每个阵列有10个子阵列,每个阵列有10个子阵列 paths = []; for (var i = 0, len_i = 10; i < len_i; ++i) { // 1st dimension paths.push([]); for (var j = 0, len_j = 10; j < len_j; ++j) { // 2nd dimension paths[i].push([]);

下面的代码将生成10个阵列,每个阵列有10个子阵列,每个阵列有10个子阵列,每个阵列有10个子阵列

paths = [];

for (var i = 0, len_i = 10; i < len_i; ++i) { // 1st dimension
    paths.push([]);
    for (var j = 0, len_j = 10; j < len_j; ++j) { // 2nd dimension
        paths[i].push([]);
        for (var k = 0, len_k = 10; k < len_k; ++k) { // 3rd dimension
            paths[i][j].push([]);
            for (var l = 0, len_l = 10; l < len_l; ++l) { // 4th dimension
                paths[i][j][k].push([]);
                paths[i][j][k][l] = [];
            }
        }
    }
}
该函数的默认形式将返回与我上面演示的for循环相同的内容

我知道这不是一个标准做法,但我这样做是出于一个非常具体的原因,需要测试它的性能


如何修改此代码以生成第n个维度数组?

您可以使用递归函数:

function nthArray(n, l) {
    if(n < 1) return;
    var arr = new Array(l);
    for(var i=0; i<l; ++i)
        arr[i] = nthArray(n-1, l);
    return arr;
}
函数数组(n,l){
如果(n<1)返回;
var arr=新数组(l);

对于(var i=0;i,可以使用递归函数:

function nthArray(n, l) {
    if(n < 1) return;
    var arr = new Array(l);
    for(var i=0; i<l; ++i)
        arr[i] = nthArray(n-1, l);
    return arr;
}
函数数组(n,l){
如果(n<1)返回;
var arr=新数组(l);
对于(var i=0;i一个简单的魔术是(没有递归):

路径=[]
数组=[路径]
对于(变量i=0;i
(我的javascript不是很流利,您可能需要在开始时声明
vars
,但这就是想法)

一个简单的魔法是(没有递归):

路径=[]
数组=[路径]
对于(变量i=0;i

(我的javascript不是很流利,您可能需要在开始时声明
vars
,但这就是我的想法)

你考虑过递归吗?这确实有助于认识到JavaScript并没有像
C
那样真正拥有“多维数组”。相反,你拥有数组数组。这难道不能通过用10个副本(深度克隆)创建一个数组来迭代实现吗对于当前的MD数组,这样做了N次?你考虑过递归吗?这确实有助于认识到JavaScript并没有像
C
那样真正拥有“多维数组”。相反,你拥有数组数组。这难道不能通过用10个副本(深度克隆)创建一个数组来迭代实现吗对于当前的MD数组,做了N次?谢谢。出于某种原因,我忘记了递归的想法,但这个答案是简洁和完美的。谢谢。出于某种原因,我忘记了递归的想法,但这个答案是简洁和完美的。
paths = []
arrays = [paths]
for (var i = 0; i < dimensions; i++) {
    tmpArr = []
    for (var k = 0; k < arrays.length; k++) {
        for (var j = 0; j < size; j++) {
            val = []
            tmpArr.push(val)
            arrays[k].push(val)
        }
    }
    arrays = tmpArr
}