代码之家  ›  专栏  ›  技术社区  ›  totalnoob

在javascript中遍历具有嵌套循环的数组

  •  0
  • totalnoob  · 技术社区  · 6 年前

    直到最近我才真正理解多维数组以及如何在它们之间移动。

    到目前为止,我已经知道了如何在水平、垂直和对角线方向上自动遍历二维数组,而不需要在一个简单的函数上硬编码任何数字,从而帮助我更好地理解嵌套循环。

    一个数组是用所有可能的序列创建的,但是右边的对角线(3,5,7)似乎无法概念化如何循环到和通过。

    有什么线索吗?

    有没有比这更聪明的方法?

    const grid = [
      [1,2,3],
      [4,5,6],
      [7,8,9]
    ]
    
    const coordinates = grid => {
      const arr = [];
    
      // get horizontals
      for (let i = 0; i < grid.length; i++) {
        for (let j = 0; j < grid.length; j++) {
          arr.push(grid[i][j]);
          // horizontals
          // grid[i][j]
          // grid[0][0]
          // grid[0][1]
          // grid[0][2]
          // grid[1][0]
          // grid[1][1]
          // grid[1][2]
          // grid[2][0]
          // grid[2][1]
          // grid[2][2]
        }
      }
    
      // get verticals
      for (let i = 0; i < grid.length; i++) {
        for (let j = 0; j < grid.length; j++) {
          arr.push(grid[j][i]);
          // verticals
          // grid[j][i]
          // grid[0][0]
          // grid[1][0]
          // grid[2][0]
          // grid[0][1]
          // grid[1][1]
          // grid[2][1]
          // grid[0][2]
          // grid[1][2]
          // grid[2][2]
        }
      }
    
      for (let i = 0; i < grid.length; i++) {
        for (let j = 0; j < grid.length; j++) {
          if (i === j) arr.push(grid[i][j])
          // grid[0][0]
          // grid[1][1]
          // grid[2][2]
        }
      }
    
      console.log(arr)
    }
    
    coordinates(grid);
    
    
     
    1 回复  |  直到 6 年前
        1
  •  2
  •   Steven Spungin    6 年前

    这对诊断有用。

    for (let i = 0; i < grid.length; i++) {
      // grid[i][i]
    }
    

    对于不同的索引,可以使用grid.length-1-i遍历4条对角线。

      // grid[grid.length-1-i][i] // etc...
    

      // grid[i][grid.length-1-i] // etc...