2012-07-09 37 views
1

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

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

dataset[row0-1][column+column0] 

我真的不希望有执行下列操作...

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

的问题是,我得先检查行,然后检查列。我更喜欢用一个操作或一行来完成这些检查。相反,然后返回出界错误,为什么不只是返回null或未定义?

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

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

是不是真的那么难在同一行中添加更多的检查。只要检查行和列是否都在一个if语句中定义。如果你已经准备写一篇,那么添加一个更多的陈述就没那么重要了。 – spinon 2012-07-09 16:20:31

+0

它可能有点复杂,以纠正这一点,这将有助于如果JavaScript返回一个未定义,然后在坏的查找后崩溃,也许我们可以添加一个.prototype,将防止数组查找崩溃?我不记得它是否坠毁,它已经有一段时间了。 – htmlfarmer 2015-03-13 04:50:52

+0

行= 5 数据集= [0,1,2,3,4] 数组[0,1,2,3,4] dataset.length 数据集[6] 未定义 数据集[6 ] [1] 类型错误:数据集[6]是未定义的数据集 [5] [1] 类型错误:数据集[5]是未定义的数据集 [4] [1] 未定义 – htmlfarmer 2015-03-13 04:54:22

回答

1

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

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

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

+0

从一个角度来看,这被认为是一个Javascript的错误?即使在201X,它看起来很基础? – htmlfarmer 2018-02-04 05:57:51

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]}; 
} 
0

使用AND-operator &&您可以轻松组合嵌套if子句到一衬:

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

虽然你真的应该检查数组的长度,不(只)gre亚特 - 大于0更好:

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

我做的大多是这样的:假设我们有二维数组arr,我们需要访问它是不存在的元素。

var arr = [/*elements*/] 
var get = function(x, y) { 
    if(!arr[x]) { 
     return false; 
    } 
    return arr[x][y] || false; 
} 
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 
 
}