访问多维数组中的每个值

时间:2018-05-05 08:34:07

标签: javascript arrays recursion

我正在尝试构建一个函数来访问多维数组中的每个值,这些值对维度没有限制。

生成每个值的深度。

var array = [[0, [[1, [2, [3, []]]],[4, []],[5, [6, []]],[7, [8, [9, []]]],[10, []]]]];

function visitall(a) {
  for (i = 0; i < (a.length); i++) {
      console.log(a[i][0])
      for (j = 0; j < (a[i][1].length); j++) {
          console.log(a[i][1][j][0])
          for (n = 0; n < (a[i][1][j][1].length); n++) {
              console.log(a[i][1][j][1][n][0])
          }
      }
  }
}

visitall(array)

6 个答案:

答案 0 :(得分:2)

只使用递归

&#13;
&#13;
var array = [
  [0, [[1, [2, [3, []]]], [4, []], [5, [6, []]], [7, [8, [9, []]]], [10, []]]]
];

function visit(a) {
  if (Array.isArray(a)) {
    for (let i = 0; i < a.length; i++) visit(a[i]);
  } else {
    console.log(a);
  }
}

visit(array);
&#13;
&#13;
&#13;

答案 1 :(得分:2)

使用reduce。循环遍历任何多维数组非常简单。

options

您可以在缩小功能中将其展平或直接执行任何操作

答案 2 :(得分:1)

您可以使用递归。

使用Array.isArray检查变量是否为数组。如果是,请执行forEach并再次调用visitall功能。

&#13;
&#13;
function visitall(a) {
  if (Array.isArray(a)) a.forEach(visitall);
  else console.log(a); //Not an array, so console.log
}


var array = [[0, [[1, [2, [3, []]]],[4, []],[5, [6, []]],[7, [8, [9, []]]],[10, []]]]];

visitall(array);
&#13;
&#13;
&#13;

或者您可以joinsplitfilter,这样您就可以获得数组中的所有数字。你现在可以正常循环。

&#13;
&#13;
var array = [[0, [[1, [2, [3, []]]],[4, []],[5, [6, []]],[7, [8, [9, []]]],[10, []]]]];

var result = array.join().split(',').filter(o => o !== '');

console.log(result);
&#13;
&#13;
&#13;

答案 3 :(得分:1)

使用递归:

function logall(a){
  if( typeof(a)=='object' )
    for(var j=0;j<(a.length);j++)   
      logall(a[j]);
  else
   console.log(a)
 }

答案 4 :(得分:1)

对于通用用法,你应该写一个递归函数,因为我可以看到你的数组深度没有修复! 这是一个如何做到这一点的例子:

var array = [[0,[
[1,[2,[3,[]]]],
[4,[]],
[5,[6,[]]],
[7,[8,[9,[]]]],
[10,[]]
]
]
]


function visit(a){
  if (Array.isArray(a)) {
    a.map((value) => {
     visit(value);
    })
  } else {
    console.log(a)
  }
}

visit(array)

答案 5 :(得分:0)

ES6

您可以使用forEach()Array.isArray()recursion function的帮助下访问多维数组中的每个值。

<强>样本

var arr=[[0, [[1, [2, [3, []]]],[4, []],[5, [6, []]],[7, [8, [9, []]]],[10, []]]]];

let visitall = (arr) =>{
    arr.forEach(v=>Array.isArray(v)?visitall(v):console.log(v))
}

visitall(arr);
.as-console-wrapper {max-height: 100% !important;top: 0;}