2014-11-20 10 views
2

두 개의 개체 배열이 있는데 두 번째 개체의 배열에 따라 첫 번째 개체를 필터링하고 싶습니다. 개체에 자바 스크립트 키가 있는지 확인하십시오.

var ary1 = [{id: 23, title: 'blabla'},{id:43, title: 'bleble'}, {id:54, title:'blibli'}]; 
var ary2 = [{id:23},{id:54}, {id:65}]; 

그래서이 경우 제가 반환하고자하는 ID의 23 (이 경우, 제목) 가능한 모든 특성을 가진 첫 번째 배열의 (54)이 객체와 배열입니다 예를 들면 다음과 같습니다이다.

나를 도울 수있는 힌트를주세요.

+0

시도한 코드를 알려주십시오. –

답변

2

도움이 될만한 정보가 있습니다. 각 id 값의 배열을 구축 ary2 통해

  1. 루프 (의이 배열 existingIds 부르 자).

  2. 그 루프가 끝나면 ary1을 반복합니다. ary1의 각 항목에 대해 방금 구성한 existingIds 배열에 id 값이 있는지 확인하십시오. 그렇다면 result 배열에 현재 항목을 추가하십시오.

내가 당신을 위해 코드를 작성할 수 있지만 먼저 자신 :)

1

하는이 노력이 시도하는 경우가 더 나은 학습 경험이 될 것입니다 :

var ary1 = [{id: 23, title: 'blabla'},{id:43, title: 'bleble'}, {id:54, title:'blibli'}]; 
var ary2 = [{id:23},{id:54}, {id:65}]; 
var newary=[]; 

for(x in ary1){ 
    for(y in ary2){ 
     if(ary1[x].id == ary2[y].id){ 
      newary.push(ary1[x]); 
     } 
    } 
} 

console.log(newary);// here newary will be your return newary; 
1

뿐만 아니라 사용을 할 수 있음 자바 스크립트에 내장 된 일부 기능 프로그래밍.

filteredResults = ary1.filter(function(ele){ 
    return (ary2.map(function(idobj){return idobj.id;}).indexOf(ele.id)>-1) 
}) 

filter(function) 콜백 함수를 통과 배열의 각 요소를 반복한다. 해당 콜백 내에서 true가 반환되면 해당 값이 유지됩니다. false이면 해당 값이 필터링됩니다.

또한 map(function)은 콜백 값을 전달하는 배열의 각 요소를 반복합니다. 지도 콜백에서 반환 된 모든 값이 결과에 삽입됩니다. 따라서 우리는 ary2의 각 요소에서 id를 취하여 map 함수로 반환 할 수 있습니다.

var ary1 = [{id: 23, title: 'blabla'},{id:43, title: 'bleble'}, {id:54, title:'blibli'}]; 
 
var ary2 = [{id:23},{id:54}, {id:65}]; 
 
//Filter for the available ID's, store the resulting objects in a new array 
 
filteredResults = ary1.filter(function(ele){ 
 
    //map creates an array of just ID's 
 
    return (ary2.map(function(idobj){return idobj.id;}).indexOf(ele.id)>-1) 
 
}) 
 

 
//now do whatever you were planning on doing with your results/ 
 
var res = document.getElementById("results"); 
 
filteredResults.forEach(function(ele){ 
 
    res.innerHTML+="<li>{id:"+ele.id + ",title:" +ele.title+"}</li>" 
 
}) 
 
console.log(filteredResults);
<ul id="results"></ul>

3

당신이 map를 사용하여 검색 할 인덱스의 목록 가져 오기 :

var indexes = ary2.map(function (el) { 
    return el.id; 
}); 

filter 결과 인덱스의 목록을 기반으로 :

var result = ary1.filter(function (el) { 
    return indexes.indexOf(el.id) > -1; 
}); 

DEMO

+1

이것이 왜 상향 및 내 대답을 얻지 못합니까? 나는 대답 8 분 전에 내 대답에서 똑같은 일을 했습니까? –

+1

@ArtyMcFly 단순함과 간결함이 여기에 다른 점이 있다고 생각합니다 ... –

+1

'필터'에서'맵 '을 결합했기 때문에 (내 마음 속에서) 더 쉽게 이해할 수있는 두 가지 별개의 작업으로 사용했기 때문일 수 있습니다 . – Andy

관련 문제