2012-05-08 5 views
2

에 나는과 같이 객체의 2 차원 배열을 가지고 :찾기 지수는 자바 스크립트

[[{id: 123}, {id: 456}, {id: 789}], [{id: 111}, {id: 222}, {id: 333}], [{id: 444}, {id: 555}, {id: 666}], [{id: 777}]] 

내가 최고 배열 수준에서 ID의 인덱스를 찾아야합니다.

난 '222'나는 다음과 같은 시도 1.

의 인덱스 반환 기대 값과 ID 속성을 검색하는 것이 었습니다 그래서 경우 :

var arr = [[{id: 123}, {id: 456}, {id: 789}], [{id: 111}, {id: 222}, {id: 333}], [{id: 444}, {id: 555}, {id: 666}], [{id: 777}]], 
    len = arr.length 
    ID = 789; 

for (var i = 0; i < len; i++){ 
    for (var j = 0; j < arr[i].length; j++){ 
     for (var key in o) { 
      if (key === 'id') { 
       if (o[key] == ID) { 
        // get index value 
       } 
      } 
     }   
    } 
} 

답변

4

은 당신의 코드를 랩 함수, 위해 fallthrough 센티넬 값을 반환하여, return i과 의견을 교환 (-1 예) :

function indexOfRowContainingId(id, matrix) { 
    for (var i=0, len=matrix.length; i<len; i++) { 
    for (var j=0, len2=matrix[i].length; j<len2; j++) { 
     if (matrix[i][j].id === id) { return i; } 
    } 
    } 
    return -1; 
} 
// ... 
indexOfRowContainingId(222, arr); // => 1 
indexOfRowContainingId('bogus', arr); // => -1 
1

당신을 알고 있기 때문에 당신이 수행 id합니다 for-in 루프가 필요하지 않습니다.

외부 루프를 깨기 만하면 i이 귀하의 가치가됩니다.

var arr = [[{id: 123}, {id: 456}, {id: 789}], [{id: 111}, {id: 222}, {id: 333}], [{id: 444}, {id: 555}, {id: 666}], [{id: 777}]], 
    len = arr.length 
    ID = 789; 

OUTER: for (var i = 0; i < len; i++){ 
    for (var j = 0; j < arr[i].length; j++){ 
     if (arr[i][j].id === ID) 
      break OUTER;   
    } 
} 

또는 함수로 만들고 i을 반환하십시오.