2012-07-09 2 views
1

자바 스크립트에서 경계를 확인하고자하는 2 차원 배열이 있습니다. 각 인덱스를 독립적으로 확인하지 않고이 작업을하는 것이 더 좋습니다. 예를 들어 자바 스크립트에서 2D 배열 경계 확인하기

내 2 차원 배열 인 경우

...
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 
{ 
    ... 
} 
+0

열심히 같은 줄에 한 번 더 검사를 추가하는 정말입니다. 하나의 if 문에 행과 열이 모두 정의되어 있는지 확인하십시오. 이미 하나를 쓰고 있다면 더 많은 진술을 추가하는 것이 아닙니다. – spinon

+0

어쩌면이 문제를 해결하기 위해 약간의 복잡성이있을 수 있습니다. javascript가 undefined를 반환하면 잘못된 조회가 발생했을 때 오류가 발생하는 경우 도움이됩니다. 배열 조회시 충돌을 방지하는 .prototype을 추가 할 수 있습니다. 추락했는지 여부는 기억이 안납니다. – htmlfarmer

+0

= 5 행 5 세트 = 0,1,2,3,4] 어레이 [0, 1, 2, 3, 4] dataset.length 세트 [6] 정의 세트 [6 [1] 오류 : 집합 [5]이 보정 된 것처럼 세트 [4] [1] 정의 – htmlfarmer

답변

1

각 색인을 개별적으로 검사하는 이유는 각 색인이 각 색인마다 다른 길이를 가질 수 있기 때문입니다.

나는 C#이 Multidimensional Arrays 인 것을 알고 있지만 자바 스크립트는 Jagged Arrays을 사용합니다.

나는 언제든지 이렇게 변하지 않습니다.

+0

한 가지 관점에서 이것은 자바와 관련된 버그로 간주됩니까? 201X에서도 매우 근본적인 것처럼 보입니까? – htmlfarmer

2

당신은 확인하는 기능을 쓸 수 있습니다 : 당신은 쉽게 AND-operator && 사용하여 한 줄에 IF-절을 중첩 결합 할 수 있습니다

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

:

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

    return null; 
} 

그런 다음 당신은 다음과 같이 사용할 수 있습니다 :

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

실제로 배열의 길이를 확인해야하지만 gre (만)는 아닙니다. ater에-0보다 더 나은 :

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

나는 대부분 이런 식으로 할 : 우리는 2 차원 배열 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 
 
}

관련 문제