在我的程序中,我有:
一个看起来像 [1, 2, 2] 的数组 currentIndex 一个看起来像 [1, [2, 0, [2, 3, -]] 1] 的多维数组方向
如何以可以访问方向[1][2][2] 的方式遍历第一个(在第二个的索引中打开第一个数组)?
在我的程序中,我有:
一个看起来像 [1, 2, 2] 的数组 currentIndex 一个看起来像 [1, [2, 0, [2, 3, -]] 1] 的多维数组方向
如何以可以访问方向[1][2][2] 的方式遍历第一个(在第二个的索引中打开第一个数组)?
要直接访问一个值,您可以使用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
所以,你的数组可以有任何维度,但你仍然打印元素。
据我了解,您想遍历第一个数组,其中第一个数组中的每个值都是您要在多维数组中访问的索引。以下递归函数应该可以工作:
//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 ]);
}
}
如果你想循环一个多维数组,那么这个过程可能看起来像:
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 in 循环会自动使您的索引成为字符串。以下是做同样事情的防故障方法,还有其他一些帮助:
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];
}
}
}
当您执行上述任一循环时,想象每个内循环运行一整圈,在外循环增加其增量之前,然后它再次运行一整圈。您确实必须知道实现这些循环的目标是什么。