带有嵌套循环的多维数组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的主要内容,如果未能解决你的问题,请参考以下文章

如何从 C# 中的嵌套循环写入多维数组?

使用嵌套的每个循环构建多维数组?

C / C ++如何复制没有嵌套循环的多维char数组?

Php多维数组与混合for和Foreach循环

多维javascript数组中的for循环

如何理解JS多维数组