2013-01-10 4 views
0

매칭 엔트리 (JavaScript)를 1 차원 어레이로 2 차원 배열을 비교하고 제거 :이 같은 2 차원 어레이가

all = [ 
    [bla, bla, ID1, bla, bla], 
    [bla, bla, ID2, bla, bla], 
    [bla, bla, ID3, bla, bla], 
    [bla, bla, ID4, bla, bla], 
    [bla, bla, ID5, bla, bla], 
    [bla, bla, ID6, bla, bla] 
] 

다음에, I는 다음과 같이 1 차원 배열을 가지고

selected = [ID1, ID2, ID6] 

나는 ID 값 내 배열 selected에있는 ID와 일치하지 않는 경우 내 배열 all에서 모든 항목을 제거해야합니다. 이 예에서 나는 다음과 같은 새로운 배열을 얻을 것 이상 :

reduced = [ 
    [bla, bla, ID1, bla, bla], 
    [bla, bla, ID2, bla, bla], 
    [bla, bla, ID6, bla, bla] 
] 

가 어떻게이 같은 배열을받을 수 있나요?

도와 주셔서 감사합니다.

+0

워스 적은 기능을 의미하는 바와 같이, 동일한 테스트를 수행하는 루프를 사용하여 좀 더 빠르게 할 수있다) 당신이 이것을 많이 할 예정이라면. 그러나 당신이 말한대로 * 당신이하고있는 일에 더 나은 접근법이있을 수 있습니다. – Ross

답변

2

하면 하나는 단순히 의미 Array.prototype.filter

var reduced = all.filter(function (a) {return selected.indexOf(a[2]) !== -1;}); 

, all[i][2] (는 ID (COL)의 값)를 선택 어레이의 경우,이 엔트리를 유지를 사용하여 본을 줄 수있다. 새 배열을 작성하므로 allselected은이 프로세스의 영향을받지 않습니다.

[underscore.js] 위치에있는 모양 (http://underscorejs.org 복용 오버

var reduced = [], i = 0; 
for (; i<all.length; ++i) 
    if (selected.indexOf(all[i][2]) !== -1) 
     reduced[reduced.length] = all[i]; 
+0

감사! 당신의 설명을 위해서도. – maze