【问题标题】:Multidimensional Array Javascript with nested loop带有嵌套循环的多维数组Javascript
【发布时间】: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
  • 这将是使用递归函数的最佳时机,每次一个条目是数组时都会调用它自己!

标签: javascript arrays loops


【解决方案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 ]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-01-18
      • 1970-01-01
      • 2019-03-18
      • 2023-04-01
      • 1970-01-01
      • 1970-01-01
      • 2022-07-06
      • 1970-01-01
      相关资源
      最近更新 更多