检查是否定义了数组中的值

时间:2013-12-10 18:09:03

标签: javascript arrays

我正在尝试用零和一个数组填充一个数组,如果你把它排列成一个6乘6的网格,那么就会有随机分散的数据直接相邻。

例如:
001101
111001个
001011
001110
111000

为了检查潜在的旁边是否有一个,我需要检查数组的4个值。这是我遇到困难的地方。我已尝试在Stackoverflow上实现其他问题的解决方案,但我不能让它专门用于if语句。

function initialize(){
    tile = new Array(6);
    first = true;
    for(i = 0; i < 6; i++){
        tile[i] = new Array(6);
        for(j = 0; j < 6; j++){
            //This is where I'm having difficulty
            if(Math.random() < .75 && tile[i + 1][j + 1] != 'undefined' || tile[i - 1][j - 1] != 'undefined' || tile[i - 1][j + 1] != 'undefined' || tile[i + 1][j - 1] != 'undefined' || first){
                tile[i][j] = 1;
                first = false;
            }else{
                tile[i][j] = 0;
            }
        }
    }
}

2 个答案:

答案 0 :(得分:4)

您忘了添加typeof

这是您通常检查undefined的方法。

typeof tile[i - 1][j + 1] === 'undefined'

More info on typeof


根据您的评论编辑,您正在做这样的事情

typeof tile[i - 1][j - 1] !== 'undefined'

并获得

的错误
  

未捕获的TypeError:无法读取未定义或未捕获的TypeError的属性“1”:无法读取未定义的属性“-1”。

两件事:你试图访问-1的索引似乎总是会失败。也就是说,即使你修复了这个一个一个错误,就像

这样的表达式
tile[i - 1][j - 1]
如果

将始终出错

tile[i - 1]

本身未定义。所以你必须单独检查。像

这样的东西
(typeof tile[i - 1] === 'undefined' || typeof tile[i - 1][j + 1] === 'undefined')

这样,如果tile[i - 1]未定义,整个表达式将在您收到错误之前“短路”。

答案 1 :(得分:1)

您正在使用字符串'undefined'检查是否相等,而不是使用未定义的值。尝试

tile[i + 1][j + 1] !== undefined

(undefined周围没有单引号)。

在此讨论:How to check for "undefined" in JavaScript?