2015-01-25 3 views
4

좀 더 우아한 방법이 있는지 궁금합니다. 나는이 솔루션을 함께했다자바 스크립트 : 문자열 배열로 객체의 배열을 필터링하십시오.

var kpis = ["kpi03", "kpi02"]; 

다른 배열에 일치하는 모든 개체를 반환하려면 id 재산 필터링하려면 지금

a = [ 
    { 
    "id": "kpi02", 
    "value": 10 
    }, 
    { 
    "id": "kpi02", 
    "value": 30 
    }, 
    { 
    "id": "kpi02", 
    "value": 11 
    }, 
    { 
    "id": "kpi02", 
    "value": 33 
    }, 
    { 
    "id": "kpi03", 
    "value": 1 
    }, 
    { 
    "id": "kpi03", 
    "value": 0.5 
    }, 
    { 
    "id": "kpi04", 
    "value": 0.5 
    } 
] 

:이 같은 객체의 배열이 있다고 가정 :

var b = []; 
for (j in kpis) { 
for (i in a) { 
    if (a[i].id == kpis[j]) { 
    b.push(a[i]); 
    } 
} 
} 

는 R에서오고, 이것은 filter 프로토 타입과는 그 어떤 방법이 조금 복잡하게 보인다? 이 문자열과 같이 하나의 문자열 대신 비교할 문자열 배열이 있습니다.

var b = a.filter(function(item){return (item.id == "kpi03");}); 

감사합니다.

답변

6

당신은 Array.indexOf

var b = a.filter(function(item){return kpids.indexOf(item.id) > -1 }); 

Array.indexOf

var res = a.filter(function (el) { 
    return kpis.indexOf(el.id) >= 0; 
}); 

Example

+1

빠른 답변과 예를 들어 주셔서 감사합니다. 거기에 더 우아한 해결책이 있어야한다는 것을 알았습니다 :) – Schw4rz

1

그냥하게 사용처럼 필터에 indexOf를 사용할 수는 배열에 전달 된 인수의 인덱스를 반환에 indexOf이 (가) 호출 중입니다. 찾고있는 요소가 없으면 -1을 반환합니다.

그래서 인덱스가 -1보다 큰지 확인합니다.

관련 문제