水平遍历2D数组-javascript

时间:2018-10-06 14:53:29

标签: javascript

如何水平遍历这个3x3的阵列网格并打印出1、4、7、2、5、8、3、6、9?

edit:除了使用两个循环(如果数组的长度与其他长度不相等时)同样有效之外,还有其他更有效的方法吗?

let grid = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

9 个答案:

答案 0 :(得分:3)

您可以使用嵌套的for循环:

let grid = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
];
for(let i = 0; i < grid[0].length; i++){
  for(let j = 0; j < grid.length; j++)
    console.log(grid[j][i]);
}

答案 1 :(得分:2)

for(var i = 0; i < grid.length; i++) {
    var arr = grid[i];
    for(var j = 0; j < arr.length; j++) {
        console.log("array[" + i + "][" + j + "] = " + arr[j]);
    }
}

答案 2 :(得分:2)

let grid = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

let gridLength = grid[0].length;
let gridHeight = grid.length;
for(let l1=0; l1<gridLength;l1++) {
    for(let l2=0; l2<gridHeight;l2++) {
        console.log(grid[l2][l1]);
    }
}

假设网格是矩形的(网格通常是;)),您可以像在此代码段中那样循环遍历它,首先是列,然后是行。

有一个问题,我们是否可以不使用2个循环就能做到,我认为它实际上是更好,更清洁的解决方案:

let grid = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

let gridLength = 3;
for(let l1=0; l1<gridLength*gridLength;l1++) {
    console.log(grid[l1%gridLength][Math.floor(l1/gridLength)]);
}

答案 3 :(得分:2)

如果数组的长度相同,则有很多答案可以解决。这是处理可能不同长度的数组的一种方法。它基本上会运行,直到找不到更多数据为止:

let grid = [
    [1, 2, 3, 4, 5],
    [4, 5, 6, 7],
    [7, 8, 9, 10, 11, 12]
  ];

let current = grid, i = 0
while(current.length){
    current = grid.filter(arr => i < arr.length)
    current.forEach(arr =>  console.log(arr[i]))
    i++
}

答案 4 :(得分:1)

您需要使用嵌套的 for循环

所以请看一下我的解决方案:

let grid = [
     [1,2,3],
     [4,5,6],
     [7,8,9]
];
for (let x = 0; x < grid[0].length; x++) {
    for (let y = 0; y < grid.length; y++) { 
      console.log(grid[y][x]);
    }
}


此网格打印出预期的解决方案:1, 4, 7, 2, 5, 8, 3, 6, 9?


一些解释

在这种情况下,我们使用两个不同的for-loops

  • X for (let x = 0; x < 3; x++) {}的外层
  • Y for (let y = 0; y < 3; x++) {}的内部一个

注意:这仅适用于网格为矩形的情况,因为使用grid[0].length会产生错误。


编辑:如果您只想使用单个循环,请尝试以下操作:

let grid = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

for (let i = 0 ; i < grid.length * grid[0].length ; i++)
     console.log(grid[i % grid.length][parseInt(i / grid.length)]);

答案 5 :(得分:1)

您只需要找到内部数组和外部数组的大小

for(let i=0;i<countYourArraySize;i++)
{
for(let j=0;j<countYourInnerArayLength;j++)
{
console.log(grid[j][i])
}
}

答案 6 :(得分:1)

如果使用map,则只需一个(显式)循环即可完成:

let grid = [
 [1,2,3],
 [4,5,6],
 [7,8,9]
];
let result = [];
for (let i=0; i < grid.length; i++) {
    result = result.concat(grid.map((row) => row[i])));
}
console.log(result);

答案 7 :(得分:1)

您可以单步执行此操作。但是长度必须相同

let grid = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9]
];

for (var i = 0; i < grid.length*grid.length; i++) {
    var row = Math.floor(i / grid.length);
    var col = i % grid.length;
    console.log(grid[col][row]);
}

答案 8 :(得分:-1)

let grid = [
     [1,2,3],
     [4,5,6],
     [7,8,9]
];
for(let x = 0; x < 3; x++){
    for(let y = 0; y < 3; y++){
       console.log(grid[y][x]);
    }
}

这里的代码是特定于数据的