我正在尝试构建一个函数来访问多维数组中的每个值,这些值对维度没有限制。
生成每个值的深度。
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)
答案 0 :(得分:2)
只使用递归
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;
答案 1 :(得分:2)
使用reduce。循环遍历任何多维数组非常简单。
options
您可以在缩小功能中将其展平或直接执行任何操作
答案 2 :(得分:1)
您可以使用递归。
使用Array.isArray
检查变量是否为数组。如果是,请执行forEach
并再次调用visitall
功能。
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;
或者您可以join
,split
和filter
,这样您就可以获得数组中的所有数字。你现在可以正常循环。
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;
答案 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)
您可以使用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;}