2012-07-09 64 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 
 
}