带有嵌套循环的多维数组Javascript
Posted
技术标签:
【中文标题】带有嵌套循环的多维数组Javascript【英文标题】:Multidimensional Array Javascript with nested loop 【发布时间】:2022-01-13 15:33:47 【问题描述】:例如我有一个这样的数组
var myArray = [
[1,2,3],
[4,5,6],
[7,8,9,10],
[[11,12],[13,14,15]]];
for (var i = 0;i < myArray.length;i++)
for(var j = 0 ;j< myArray[i].length;j++)
for(var k = 0;k< myArray[i][j].length;k++)
console.log(myArray[i],[j][k]);
但输出只有 11,12,13,14,15。 我想打印所有的值 有人可以帮忙解决吗 提前谢谢你
【问题讨论】:
这能回答你的问题吗? Deep flat multidimensional array in javascript 编写一个函数 (x
),它接受一个数组并迭代该数组的元素。在函数中测试每个元素,如果它是一个数组,则使用该数组调用x
....
您的数组中有不同级别的嵌套。 [1,2,3]
处于“第二级”,而[11,12]
和[13,14,15]
处于“第三级”。因此,例如 myArray[i][j].length
将是 undefined
对于 i == 0
这将是使用递归函数的最佳时机,每次一个条目是数组时都会调用它自己!
【参考方案1】:
使用例如Array.prototype.flat(), .flat(2) 展平到 2 个数组的深度。
var myArray = [
[1,2,3],
[4,5,6],
[7,8,9,10],
[[11,12],[13,14,15]]];
console.log(myArray.flat(2));
【讨论】:
为什么是 "magic number"2
?
深度级别指定嵌套数组结构应该被展平的深度。默认为 1。
并没有真正回答我的问题 ;)
如果你不确定你有多少关卡,你可以写 Infinity。虽然没有在问题中指定【参考方案2】:
你可以使用递归函数 首先将整个数组传递给它,然后循环它并检查您正在访问的元素是数组还是数字 如果它的数组再次调用相同的函数并且只传递这个元素 否则,如果它的数字只是打印它
即使您不知道有多少嵌套数组,这也有效,否则使用 MWO 答案
var myArray = [
[1,2,3],
[4,5,6],
[7,8,9,10],
[[11,12],[13,14,15]]];
function printArray(arr)
for(var i = 0; i < arr.length; i++)
if(Array.isArray(arr[i]))
printArray(arr[i]);
else
console.log(arr[i]);
printArray(myArray);
【讨论】:
【参考方案3】:此功能适用于任何深度的多维数组。使用递归
var myArray = [1,2,33,44, [1,2,3], [[11,12],[13,14,15]]];
var myArray1 = [1,2,33,44, [[11,12],[13,14,15]]];
var deepFlattenArray = function (array)
var result = [];
array.forEach(function (element)
if (Array.isArray(element))
result = result.concat(deepFlattenArray(element));
else
result.push(element);
);
return result;
;
console.log(deepFlattenArray(myArray));
// output = [ 1, 2, 33, 44, 1, 2, 3, 11, 12, 13, 14, 15]
console.log(deepFlattenArray(myArray1));
// output = [1, 2, 33, 44, 11, 12, 13, 14, 15 ]
【讨论】:
以上是关于带有嵌套循环的多维数组Javascript的主要内容,如果未能解决你的问题,请参考以下文章