在JavaScript中制作第n维数组

时间:2014-04-16 20:03:09

标签: 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([]);
        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] = [];
            }
        }
    }
}

我最终需要用更多维度来做这件事,并且很想知道那里的任何一个聪明的开发人员是否可以通过以下形式的功能实现这一目标:

function makePaths(quantityInEachArray, dimensions) {

  paths = [];

   quantityInEachArray = (typeof quantityInEachArray === "undefined") ? 10 : quantityInEachArray;
   dimensions = (typeof dimensions === "undefined") ? 4 : dimensions;

   // Do some magic

   return paths;

 }

该函数以其默认形式返回与上面演示的for循环相同的东西。

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

如何修改此代码以生成nth维数组?

2 个答案:

答案 0 :(得分:4)

您可以使用递归函数:

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

答案 1 :(得分:0)

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

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
}

(我不是很流利的javascript,你可能需要在开头和每件事情都声明vars,但这就是想法)