2012-05-30 6 views
0

자바 스크립트에는 두 개의 객체 배열이 있습니다. like arr1[] = {emp1,emp2,emp3} 여기서 inturn emp1emp1.nameemp1.address을 속성으로가집니다.자바 스크립트 객체 배열 비교

뭔가

arr1={object {name='a',address='b'} {name='c',address='d'} {name='e',address='f'} }. 
arr2={object {name='a',address='b'}}. 

처럼 두 개의 배열 객체의 name 특성을 비교하고 다른 배열에 누락 된 항목을 채우는 싶었다. 결과는 [] = { 'c', 'e'}가 될 것입니다.

효과적인 결과는 무엇입니까? 나는 코드를 기대하지 않고 올바른 방향으로 나를 인도 해주세요. 감사.

+0

내가 생각할 수있는 것은 각각의'arr1' 값/요소를'arr2'에 대해 실행 한 다음'arr2.push (arr1 [i]) '를 호출하는 것이지만, jQuery는 값/요소는 서브 루프를 버리는 배열 [in], [jQuery.inArray()] (http://api.jquery.com/jQuery.inArray/)입니다. –

+0

무엇을 시도 했습니까? 두 배열을 모두 받아들이고 세 번째 배열을 반환하는 함수를 만드는 것을 고려할 것입니다. 무엇을 '누락 된 상품'으로 추천하는지 확실하지 않으므로 직접 처리해야합니다. 함수에서 for 루프와 비교할 if 문을 사용할 수 있습니다. 도움이 될 수도 있습니다 – GreenGiant

+1

당신이 중첩 된 객체가있는 객체를 사용하는 배열 대신에 이것이 훨씬 효율적이라고 생각합니다. 상기 객체의 키는 직원 고유 ID이다. 이 시점에서 object1을 object2로 확장하면 object1에 아직없는 모든 object2의 직원이 포함됩니다. –

답변

0

Array.filter 방법이 도움이 될 수 있습니다. 그것에 대한 자세한 내용은 here을 참조하십시오.

0

함수는 2 개 배열을

 function foo(arr1,arr2){ 
    var arr3 = new Array(); 
    var x=0; 
    for (var j =0; j<arr1.length; j++) 
     for(var i=0; i<arr2.length; i++) 
      if(arr1[j].name != arr2[i].name){ 
       arr3[x]=arr1[i]; 
       x++; 
    } 
return(arr3); 
    } 

같은 뜻이 루프를 볼 수 있고 그 구성 요소들이 세 번째 배열에 넣어지게 동일하지 않으면. aarr1의 이름이 arr2와 같은지 확인합니다. 그것은 다른 방법으로 검사하지 않습니다. (즉, arr2에 arr1에없는 요소가있는 경우 arr3에 넣지 않습니다.)하지만 적어도 시작해야합니다.이 함수는 2 개의 배열을 받아 들여 세 번째 배열을 반환합니다. .