无法在 JS 或 TS 中使用 'rows' 循环遍历二维数组

Can't loop through 2D array using 'rows' in JS or TS

假设,我想创建一个具有以下结构的二维数组:

[0, 1, 1, 1]
[1, 0, 0, 0]
[1, 0, 0, 0]

为了实现我的目标,首先,我创建了一个初始值为 0:

的二维数组
function createGrid(m: number, n: number): number {
    let grid: number[][] = new Array(m).fill(0).map(() => new Array(n).fill(0));

    return 0;
};

然后,我将第一行(grid[0][0]除外)的值更改为 1:

function uniquePaths(m: number, n: number): number {
    let grid: number[][] = new Array(m).fill(0).map(() => new Array(n).fill(0));

    for (let i = 1; i <= m; i++) {
        grid[0][i] = 1;
    }

    return 0;
};

同样,我尝试将第一列(grid[0][0]除外)的值更改为1:

function uniquePaths(m: number, n: number): number {
    let grid: number[][] = new Array(m).fill(0).map(() => new Array(n).fill(0));

    for (let i = 1; i <= m; i++) {
        grid[0][i] = 1;
    }

    for (let i = 1; i <= n; i++) {
        grid[i][0] = 1;   // <<-- 'Throws error here`
    }

    return 0;
};

但是,它抛出以下错误:

grid[i] is undefined

有人可以解释一下我在这里缺少什么吗?

TypeScript Playground Code Link

有两个错误:

  • 当您想填充 1 时,您交换了 mn
  • 您在条件 i <= 下创建了溢出,您需要 i <

更正版本:

function uniquePaths(m: number, n: number): number {
    let grid: number[][] = new Array(m).fill(0).map(() => new Array(n).fill(0));

    for (let i = 1; i < n; i++) {
        grid[0][i] = 1;
    }

    for (let i = 1; i < m; i++) {
        grid[i][0] = 1;
    }

    console.log(grid);

    return 0;
};

uniquePaths(3, 4);

结果:

[[0, 1, 1, 1],
 [1, 0, 0, 0],
 [1, 0, 0, 0]] 

您可以检查索引并检查逻辑非值和 return 检查的编号。

function createGrid(m, n) {
    return Array.from(
        { length: m },
        (_, i) => Array.from(
            { length: n },
            (_, j) => +(!i !== !j)
        )
    );
};

createGrid(3, 4).map(a => console.log(...a))