首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >类型记录方法总是返回未定义的嵌套数组

类型记录方法总是返回未定义的嵌套数组
EN

Stack Overflow用户
提问于 2022-03-24 17:20:53
回答 1查看 88关注 0票数 0

我正试图为一种扫雷游戏编写一种打字方法,该方法可以查看某一领域的邻居是否是地雷,而且每次我都会遇到同样的错误:

代码语言:javascript
运行
复制
Uncaught TypeError: Cannot read properties of undefined (reading '5')
代码语言:javascript
运行
复制
  private getNeighbours(field: Field[][]): number[][]{
        let mineNeighbours: number[][] = new Array(field.length)
            .fill(0)
            .map(() => new Array(field.length).fill(0));

        for (let i = 0; i < field[0].length; i++){
            for (let j = 0; j < field[1].length; j++){
                for (let yOffset = -1; yOffset < 2; yOffset++){
                    for (let xOffset = -1; xOffset < 2; xOffset++){
                        if (!(i + yOffset < 0 || i + yOffset > field[0].length || j + xOffset < 0 || j + xOffset < field[1].length || xOffset == 0 || yOffset == 0)){
                            if (field[i + yOffset][j + xOffset] instanceof Mine){
                                mineNeighbours[i][j]++;
                            }
                        }
                    }
                }
            }
        }
        return mineNeighbours;
    }

错误来自我检查当前字段是否是of实例的行

我试着调试它,认为我通过了一个未定义的测试,但这不是问题所在。我的猜测是,在检查地雷的上面,如果句子有问题。该方法应该返回一个int数组,其中包含每个字段的邻居数。

EN

回答 1

Stack Overflow用户

发布于 2022-03-24 18:52:26

您的错误将出现在if语句中。

代码语言:javascript
运行
复制
let validY = i + yOffset >= 0 || i + yOffset < field[0].length;
let validX = j + xOffset >= 0 || j + xOffset < field[1].length;
let isDifferentCell = xOffset !== 0 && yOffset !== 0;

if( validY && validX && isDifferentCell ) {
    if (field[i + yOffset][j + xOffset] instanceof Mine){ // Also is there a reason why this needs to be checked can the field value not be an instance of Mine? I would remove this if its always going to be a Mine
        mineNeighbours[i][j]++;
    }
}

这样可以更好地清理它,因此更容易阅读(如果这样的语句很大,就会让人感到困惑)。我相信你的问题是你在重复检查每一个x和y。因此,有可能是无效的指数,但另一个不是。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71606823

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档