Javascript 创建一个随机整数矩阵(范围1-5),在区域中生成0

Javascript 创建一个随机整数矩阵(范围1-5),在区域中生成0,javascript,random,Javascript,Random,我试图创建一个范围在1到5之间的随机整数矩阵。一切都运行得很好,只是偶尔会生成具有一定一致性的0 我的意思是,每次我运行代码时,第一行和最后一列总是有效的。 但是,唯一受影响的其他行(并非每次运行代码时都发生)是它们是否像区域一样“连接” 我真的不知道如何解释这个错误。另外,如果我在console.log()中使用JSON.stringify(),它实际上包含的值不是0。我知道这不是真的,因为我还有一个计算连接单元数的算法,它会将区域数为0 [4,3,4,1,1,1,3,4,0,0] [4,3,

我试图创建一个范围在1到5之间的随机整数矩阵。一切都运行得很好,只是偶尔会生成具有一定一致性的0

我的意思是,每次我运行代码时,第一行和最后一列总是有效的。 但是,唯一受影响的其他行(并非每次运行代码时都发生)是它们是否像区域一样“连接”

我真的不知道如何解释这个错误。另外,如果我在console.log()中使用JSON.stringify(),它实际上包含的值不是0。我知道这不是真的,因为我还有一个计算连接单元数的算法,它会将区域数为0

[4,3,4,1,1,1,3,4,0,0]
[4,3,3,3,4,2,1,2,3,0]
[4,3,2,5,1,5,2,2,1,0]
[1,2,1,1,5,5,5,1,4,2]
[1,5,2,2,5,3,2,2,2,1]
[2,5,2,5,3,3,1,1,1,2]
[5,2,4,4,5,5,3,2,5,2]
[3,5,1,1,2,4,3,4,5,1]
[3,4,3,3,3,4,2,4,3,5]
[4,2,5,4,5,2,5,4,2,4]

or

[4,3,4,1,1,1,3,4,1,0]
[4,3,3,3,4,2,1,2,3,4]
[4,3,2,5,1,5,2,2,1,2]
[1,2,1,1,5,5,5,1,4,2]
[1,5,2,2,5,3,2,2,2,1]
[2,5,2,5,3,3,1,1,1,2]
[5,2,4,4,5,5,3,2,5,2]
[3,5,1,1,2,4,3,4,5,1]
[3,4,3,3,3,4,2,4,3,5]
[4,2,5,4,5,2,5,4,2,4]
生成矩阵的代码:

//创建摄影机对象并定义其属性
常数照相机={
宽度:10,
身高:10,
获取totalCells(){
返回this.width*this.height;
}
};
函数生成器映射(mapArray、searchArray){
//为游戏生成tilemap
设tempArray=[];
对于(设i=0;i<(camera.totalCells);i++){
//生成一个随机数并将其推送到数组中
//当阵列具有与camera.width相同的值计数时
//将其推送到mapArray并清空tempArray,
//重复执行此操作,直到出现10x10贴图阵列
让randomInt=Math.floor(Math.random()*5)+1;
if(camera.totalCells-camera.width==i&&mapArray[0][camera.width-1]==randomInt){
//玩家1已经是这个颜色,生成一个新的随机颜色
//再次重复此循环,以便运行此if语句以确保
//玩家2的颜色是独一无二的
我--;
继续;
}
tempArray.push(randomInt);
if(tempArray.length==camera.width){
mapArray.push(tempArray);
searchArray.push(tempArray);
tempArray=[];
}
}
}
设mapArray=[];
让searchArray=[];
generateMap(mapArray、searchArray);
我使用找到的自定义函数检查数组中是否存在给定索引,因为我需要执行绑定检查

函数单元值(mapArray,y,x){
//获取给定坐标中某个单元格的值,如果该单元格
//不存在返回值为空的值
让价值;
让我们有价值;
试一试{
//检查mapArray单元格是否未定义,是否未将hasValue设置为true
//然后使用条件运算符检查该值是否为null
//如果有任何错误,请将该值设置为null
hasValue=mapArray[y][x]!==未定义;
value=hasValue?映射数组[y][x]:空;
}捕获(e){
值=空;
}
返回值;
}

不确定这些零来自哪里!我试过几次运行它,但没有看到使用上述代码的零。而且,我不明白你的逻辑是怎么做到的。请注意,当您将
tempArray
添加到
mapArray
searchArray
时,它只是添加了对同一数组的引用,因此如果您在其中一个数组中修改它,您将在另一个数组中看到相同的更改。如果要单独修改它们,则需要创建一个

也就是说,代码看起来有点笨拙,我会这样写:

function generateMapSam(width, height) {
    // function to generate random values
    const rng = () => Math.floor(Math.random() * 5) + 1;

    // populate the map a row at a time
    const map = [];
    for (let row = 0; row < height; row++) {
        map.push(Array.from({length: width}, rng));
    }

    // fix up constraints afterwards
    while (map[0][width-1] === map[height-1][0]) {
        map[height-1][0] = rng();
    }

    return map;
}

i、 是否每行都不包含零,并且没有找到任何

谢谢你的帮助!你的函数比我的好得多,回顾我的函数,我真的不知道为什么我会这样写。使用console.log(mapArray)时,它打印0,但如果使用console.log(JSON.stringify(mapArray))或console.log(mapArray[0][9]),它打印时的值介于1和5之间。我将更新post,以包含用于获取单元格值的函数,该值也返回null,因为我需要执行绑定检查
    if (!mapArray.every(r => !r.includes(0))) {
        console.log('fail');
    }