2013-03-13 4 views
0

object의 데이터를 Facebook에서 가져오고 의 자식 값이 xxx 인 모든 objects을 선택하려고합니다.하위 배열 및 개체 값으로 개체 선택

object (물론 간체)과 같이 구성되어있다 :

var friends = [ 
    { 
     id: 123456, 
     name: "Friend1 name", 
     education: [ 
      { 
       school: { 
        name: "School1 name" 
       }, 
       type: "Highscool" 
      } 
     ] 
    }, 
    { 
     id: 3456789, 
     name: "Friend2 name", 
     education: [ 
      { 
       school: { 
        name: "School2 name" 
       }, 
       type: "College" 
      } 
     ] 
    } 
] 

는이 전 education.type = "Highscool"모든 객체를 얻을한다고 가정하자. 전체 개체를 반복하지 않고 어떻게이 작업을 수행 할 수 있습니까?

+0

나는 이것이 내가 그 affraid했다 루프 –

+0

의 일종없이 가능하다 모르겠어요를 ... : -/ –

+0

을 그리고 얼마나 많은 요소 수' 교육'이 있습니까? 우리는 첫 번째'교육 [0]'만 점검해야합니까? – dfsq

답변

1

어떻게 전체 개체를 반복하지 않고도이 작업을 수행 할 수 있습니까?

수 없습니다. 그러나 하드 될 필요가 없습니다 다음 ES5 Array#filterArray#some 함수를 사용

var highSchoolFriends = friends.filter(function(friend) { 
    var keep = false; 
    friend.education.some(function(entry) { 
     if (entry.type === "Highschool") { 
      keep = true; 
      return true; 
     } 
    }); 
    return keep; 
}); 

합니다. filter은 반복자 함수가 true을 반환하는 friends 배열에있는 항목으로 구성된 새 배열을 반환합니다. some은 반복 함수가 될 때까지 배열을 반복합니다. true을 반환합니다 (이 코드는 Array#forEach 대신 사용할 수 있습니다). 아직 구형 브라우저가없는 구형 브라우저를 지원해야하는 경우, "ES5 shim"이 제공 할 수있는 구형 브라우저 중 하나입니다.

아니면 그냥 단순한 루프를 수행합니다

var i, j; 
var highSchoolFriends = []; 
var friend; 

for (i = 0; i < friends.length; ++i) { 
    friend = friends[i]; 
    for (j = 0; j < friend.education.length; ++j) { 
     if (friend.education[j].type === "Highschool") { 
      highSchoolFriends.push(friend); 
      break; 
     } 
    } 
}); 
+0

답장을 보내 주셔서 감사합니다. 어렵지는 않지만 내 친구 목록은 거대하고 앱은 휴대 전화 용이므로 많은 길을 걸지 않기를 바랬다. 하지만 다른 방법이 없다고 생각합니다. 시간 내 주셔서 감사합니다. –

+0

@KennethB : 걱정 마세요, 도움이 되었으면합니다. –