2

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

例如,如果我的二维数组是......

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 或 undefined?

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

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

5 回答 5

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]};
}
于 2012-07-09T16:19:29.497 回答
1

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

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

我不认为这种变化很快就会发生。

于 2012-07-09T16:17:28.157 回答
0

您可以使用AND 运算符&&轻松地将嵌套的 if 子句组合成单行:

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]};
}
于 2012-07-09T16:27:43.237 回答
0

我最喜欢这样:假设我们有二维数组arr,我们需要访问一个不存在的元素。

var arr = [/*elements*/]
var get = function(x, y) {
  if(!arr[x]) {
      return false;
  }
  return arr[x][y] || false;
}
于 2013-01-12T11:41:21.873 回答
0

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

功能:

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

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

    return false;
}

如何使用:

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

于 2015-03-07T14:18:48.343 回答