2014-10-10 5 views
0

그래서 여기에 까다로운 부분이 있습니다. JSON 개체가 사용자 쿼리를 기반으로 필터링해야합니다. 이 JSON에서는 식품 배열 인 category_of_foods 필드를 필터링하려고합니다. category_of_foods 필드 그냥 문자열, 배열이 아닌 때 Lo-Dash library를 사용 Lo-dash를 사용하여 _.filter의 콜백 함수에서 배열을 반복하는 방법

[ 
{ 
    "id": 338, 
    "created_at": "2014-10-08T03:32:49.000Z", 
    "user_id": 91, 
    "type_of_meal": "breakfast", 
    "category_of_foods": [ 
     "cheese burger", 
     "fruit" 
    ] 
}, 
{ 
    "id": 339, 
    "created_at": "2014-10-08T03:34:43.000Z", 
    "user_id": 91, 
    "type_of_meal": "breakfast", 
    "category_of_foods": [ 
     "chicken burger", 
     "fruit" 
    ] 
} 
] 

breakfastItems =

, 내 코드가 작동을 할 수 있었다. 받는 반환 진정한 일치를 찾을 수는 이전과 유사했다으로 지금은 또한 배열을 통해 반복하고를 제외하고,

$scope.showPicturesBreakfast = function(type, term){ // term = "fruit" 
    function filterBreakfast(category, list){ 
     return _.filter(list, function(element){ 
      return _(element.category_of_foods).forEach(function(entry){ 
       return entry === category; // returns true twice if term is fruit 
      }); 
     }); 
    } 
    $scope.breakfastPictures = filterBreakfast(term, breakfastItems); 
}; 

코드는 나에게 논리적 인 것 같다 지금은 일치하는 항목을 반환하지 않습니다 다음 코드가 _.filter 기능. 내가 뭔가 잘못하고 있는거야?

답변

2

이 경우 filter 발신자에게 진실 또는 위증 가치를 반환해야합니다. 부울을 반환하는 대신 some를 사용해보십시오 : 하나 개 이상의 항목이 일치하는 경우 그것은 true를 반환합니다

return _(element.category_of_foods).some(function(entry){ 
    return entry === category; 

.