在Javascript中检查2D数组边界

时间:2012-07-09 16:10:32

标签: javascript

我有一个二维数组,我想检查Javascript中的边界。我更喜欢这样做,而无需独立检查每个索引。

例如,如果我的2d数组是......

dataset[row0-1][column+column0]

我真的不想做以下事情......

if(row0-1 >0)
{
    if(dataset[row0-1].length >= column+column0)
    {
        data = {label : dataset[row0-1][column+column0]};
    }
}

问题是我必须首先检查行,然后检查列。我更喜欢通过一次操作或一行进行这两项检查。而不是返回一个越界错误,为什么Javascript不返回null或未定义?

例如,在未来的Javascript版本中,如果我们能做到这一点会不会更好?

if(dataset[row0-1][column+column0] != undefined)
{
   data = {label : dataset[row0-1][column+column0]};
} 
else 
{
    ...
}

5 个答案:

答案 0 :(得分:2)

您可以编写一个功能来检查:

function CheckArrayIndex(x, y) {
    if (dataset.length > x && dataset[x].length > y) {
        return dataset[x][y];
    }

    return null;
}

然后你可以像这样使用它:

if(CheckArrayIndex(row0-1,column+column0) != null){
   data = {label : dataset[row0-1][column+column0]};
}

答案 1 :(得分:1)

我认为独立检查每个索引的原因是因为每个维度在每个索引上都可以有不同的长度。

我知道C#有Multidimensional Arrays,但Javascript使用Jagged Arrays

我不认为这种情况很快就会改变。

答案 2 :(得分:0)

您可以使用AND-operator &&轻松地将嵌套的if-clauses组合到一行:

if (row0-1 > 0 && dataset[row0-1].length >= column+column0){
    data = {label : dataset[row0-1][column+column0]};
}

虽然你真的应该检查数组的长度,而不是(仅)大于0.更好:

if (row0-1 > 0 && row0-1 < dataset.length && column+column0 < dataset[row0-1].length)
    data = {label: dataset[row0-1][column+column0]};
}

答案 3 :(得分:0)

我大多喜欢这样:说我们有2d数组arr,我们需要访问一个不存在的元素。

var arr = [/*elements*/]
var get = function(x, y) {
  if(!arr[x]) {
      return false;
  }
  return arr[x][y] || false;
}

答案 4 :(得分:0)

使用@dmck答案,我在Array对象中使用原型。

功能:

&#13;
&#13;
Array.prototype.CheckBounds = function (x, y)
{
    if (this[x] === undefined)
        return false;

    if (this.length > x && this[x].length > y) {
        return true;
    }

    return false;
}
&#13;
&#13;
&#13;

使用方法:

&#13;
&#13;
if(myArray.CheckBounds(5,10)) //Check bounds
 {
   //OK
 }else{
   //Out of bounds
 }
&#13;
&#13;
&#13;