2014-06-13 2 views
0

예를 들어, 배열이 2d이고 다음과 같이 보입니다 :`var arr = [[ "1", "2", "3"], "4", "5"], [ "6"]] '항목이 다차원 배열의 임의의 차원에있는 경우

$.inArray("4", arr); 또는 arr.indexOf("4")을 실행하면 배열에 -1이 표시됩니다. 그러나 내부 배열 중 하나에 있습니다.

배열이나 배열의 요소 인 배열에 있는지 어떻게 알 수 있습니까? 즉, 배열의 모든 차원에서.

+0

재귀 ......... – adeneo

+0

@adeneo 그래서 배열에 요소가 발견되면 배열을 호출합니까? 하지만 어떻게하면 내부 배열이 var에 할당되지 않았는지에 대한 inArray 또는 인덱스를 수행합니까? – MrGuru

+0

'$ .map'을 사용하여 배열을 먼저 평평하게 해보십시오. –

답변

1

당신은 할 수 있습니다 :

var arr = [["1", "2", "3"], ["4", "5"], ["6"]]; 
if(arr.join().split(',').indexOf("4") != -1){ 
    // do something.  
} 

indexOf 배열을 평평하고 간단하게 사용 .join()은 배열을 쉼표로 구분 된 요소로 변환하고 .split(',')은 평평한 배열 인 새 배열을 만듭니다. 그래서 .indexOf()가 작동합니다.

+0

'true'를 반환합니다. 4가 배열에 없으면 14가됩니다. 이 방법은 중첩 배열에서 항목을 검색하는 방법이 아닙니다 (문자열 표현으로 변환). – Ian

+1

@lan 문자열 표현이 아니라 실제로이 솔루션이 효과적입니다. –

+0

@KingKing Crap, 나는'.join()'부분에 집중하고'.split()'을 잊어 버렸습니다. 이것은 입력이 단순한 숫자를 가진 2 차원 배열 인 한 작동하는 것처럼 보입니다. – Ian

2

더 나은 방법으로 설계된 솔루션은 배열에서 값을 검색하는 재귀 함수를 만드는 것입니다.

더 편리한 솔루션은 또한이 예와 같이 배열은 두 가지 수준의 깊은 경우

var arr = [["1", "2", "3"], ["4", "5"], ["6"]]; 
var flattened = Array.prototype.concat.apply([], arr); 
alert(flattened.indexOf("4"));