【问题标题】:JS: cannot assign to a nested array using nested for loopJS:无法使用嵌套 for 循环分配给嵌套数组
【发布时间】:2021-11-27 16:29:09
【问题描述】:

我从这段代码中得到了一个“TypeError: Cannot set property '0' of undefined”。谁能帮我这个!非常感谢

let array = [[]];
function generateField(width, height) {
    for (let i = 0; i < height; i++) {
        for (let j = 0; j < width; j++) {
            array[i][j] = Math.floor(Math.random() * 3);
        };
    };
    console.log(array);
    return array;
}

generateField(5, 5);

【问题讨论】:

  • 您有 2 个数组,您正在尝试写入两个以上的数组。您需要构建额外的数组。

标签: javascript arrays loops


【解决方案1】:

请考虑这些提示

  • 不要使用array 作为变量名,因为它可能会在某些浏览器中产生错误
  • 因为JavascriptArray基本上是链表所以不需要Array这样声明let array = [[]]。当然更合适的是创建新的Array 并将其推送到现有的Array
  • 也许在generateField 函数内声明let array = [[]] 以使其更可重用,因为查看您的代码我发现您需要创建新的Arrayn 行和m 列与随机数和@ 987654332@在你的函数之外,每次调用generateField时都会被修改

下面的工作代码:

function generateField(width, height) {
    let rows = []
    for (let i = 0; i < height; i++) {
        let columns = []
        for (let j = 0; j < width; j++) {
            columns.push(Math.floor(Math.random() * 3))
        }
        rows.push(columns)
    };
    return [...rows] // create a copy of `Array` named `rows`
}

let matrix = generateField(3, 4)
console.log(matrix)

输出

Array(4) [ (3) […], (3) […], (3) […], (3) […] ]
​
0: Array(3) [ 0, 1, 2 ]
​
1: Array(3) [ 0, 2, 0 ]
​
2: Array(3) [ 1, 2, 2 ]
​
3: Array(3) [ 2, 1, 2 ]
​
length: 4
​
<prototype>: Array []

【讨论】:

    【解决方案2】:

    您只需要在尝试插入第二级之前初始化数组。

    let array = [];
    function generateField(width, height) {
        for (let i = 0; i < height; i++) {
            if(!array[i]) array[i] = [];
            for (let j = 0; j < width; j++) {
                array[i][j] = Math.floor(Math.random() * 3);
            };
        };
        console.log(array);
        return array;
    }
    
    generateField(5, 5);

    【讨论】:

      【解决方案3】:

      数组声明不应该是:let array = [][] 而不是 let array = [[]] 吗?

      【讨论】:

      • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
      猜你喜欢
      • 2021-12-10
      • 2018-07-13
      • 2020-06-02
      • 1970-01-01
      • 2021-12-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多