努力了解这种多层for循环的工作原理

时间:2020-05-06 19:12:11

标签: javascript loops

问题

下面的函数应该创建一个m行n列为零的二维数组。

答案

function zeroArray(m, n) {
  // Creates a 2-D array with m rows and n columns of zeroes
  let newArray = [];
  let row = [];
  for (let i = 0; i < m; i++) {
    // Adds the m-th row into newArray

    for (let j = 0; j < n; j++) {
      // Pushes n zeroes into the current row to create the columns
      row.push(0);
    }
    // Pushes the current row, which now has n zeroes in it, to the array
    newArray.push(row);
  }
  return newArray;
}

let matrix = zeroArray(3, 2);
console.log(matrix);

我的问题

我熟悉在for循环中包含for循环,以遍历数组的第二层。但是在此示例中,它似乎特别令人困惑。

请您逐步解释一下这里发生了什么。

1 个答案:

答案 0 :(得分:2)

实际上,此代码不起作用。如果您运行它,将会看到它构成的是3x6而不是6x3的数组。

尝试一下

function zeroArray(m, n) {
  // Creates a 2-D array with m rows and n columns of zeroes
  let newArray = [];
  for (let i = 0; i < m; i++) {
    let row = [];

    // Adds the m-th row into newArray

    for (let j = 0; j < n; j++) {
      // Pushes n zeroes into the current row to create the columns
      row.push(0);
    }
    // Pushes the current row, which now has n zeroes in it, to the array
    newArray.push(row);
  }
  return newArray;
}

let matrix = zeroArray(3, 2);
console.log(matrix);

您需要在推送之后重新初始化该行,或者甚至更好

function zeroArray(m, n) {
  // Creates a 2-D array with m rows and n columns of zeroes
  let newArray = [];
    let row = [];
    // Adds the m-th row into newArray
    for (let j = 0; j < n; j++) {
      // Pushes n zeroes into the current row to create the columns
      row.push(0);
    }
  for (let i = 0; i < m; i++) {
    // Pushes the current row, which now has n zeroes in it, to the array
    newArray.push(row);
  }
  return newArray;
}

let matrix = zeroArray(3, 2);
console.log(matrix);

由于所有行都相同,因此请勿重新进行初始化行的工作

相关问题