没有固定大小的JS多维数组

时间:2013-10-24 23:52:55

标签: javascript arrays multidimensional-array

在我的课程中,我有:

数组currentIndex看起来像[1,2,2] 一个多维数组方向,看起来像[1,[2,0,[2,3, - ]] 1]

如何以能够访问方向[1] [2] [2](转动第二个索引中的第一个数组)的方式遍历第一个?

3 个答案:

答案 0 :(得分:1)

要直接访问一个可以使用vector[1][2]的值,但请记住,数组索引以0 开头。

但是,如果你想要遍历向量,你需要一个递归函数:

function printRecursiveArray(value, c){
  for(c=0; c<value.length; c++){

    if (typeof value[c] !=='object'){
      console.log(value[c]);     
    }else{
      printRecursiveArray(value[c],0);

    }

  }
}
var vector = [1,[1,2,3],2,3];
printRecursiveArray(vector,0);
console.log('vector[1][2]:' + vector[1][2]);// To access directly

因此,您的数组可以有任何维度,但您仍然可以打印元素。

答案 1 :(得分:1)

根据我的理解,您希望迭代第一个数组,其中第一个数组中的每个值都是您要在多维数组中访问的索引。以下递归函数应该起作用:

//index: Array of indexes 
//arr: The mutlidimensional array 
function accessMutliArr (index, arr) {
    if (index.length === 1)
        return arr [ index ];
    else {
        var currentIndex = index.splice(0, 1);
        return accessMutliArr (index , arr [ currentIndex ]);
    }
}

答案 2 :(得分:0)

如果要循环遍历多维数组,则该过程可能如下所示:

for(var i in directions){
  for(var n in direction[i]){
    for(var q in directions[i][n]){
      var innerIncrement = q, innerValue = directions[i][n][q];
    }
  }
}

考虑到for循环会自动使你的索引字符串。以下是做同样事情的失败证明方式,还有其他一些帮助:

for(var i=0,l=directions.length; i<l; i++){
  var d = directions[i];
  for(var n=0,c=d.length; n<c; n++){
    var d1 = d[n];
    for(var q=0,p=d1.length; q<p; q++){
      var innerIncrement = q, innerValue = d1[q];
    }
  }
}

当您执行上述任一循环时,想象每个内循环运行整圆,在外循环增加其增量之前,然后再次运行整圆。你真的必须知道你的目标是实现这些循环。