2016-06-21 3 views
0

У меня есть раскрывающийся список с опцией multiselect. Я хочу отфильтровать данные из сложного JSON на основе этого массива.Фильтрующий комплекс Angularjs JSON по массиву

Выбранные параметры формирует массив данных, как:

$scope.myval=["Adyar","Paris","central"]; 

Мой JSON:

$scope.myTest={  
    "buslist": 
     { 
     "code":"1", 
     "message":"Success", 
     "fromStationCode":"71", 
     "searchResult":[  { 
     "arrivalTime":"17:00:00", 
     "availableSeats":"42", 
     "boardingPointDetails":[{ 
     "code":"1631", 
     "name":"Koyambedu", 
     "time":"09:30:00" 
     }, 
     { 
     "code":"961296", 
     "name":"Paris", 
     "time":"09:45:00" 
     } 
     ] 
     ] 
     }, 

     { 
     "arrivalTime":"18:00:00", 
     "availableSeats":"32", 
     "boardingPointDetails":[{ 
     "code":"2084", 
     "name":"Adyar", 
     "time":"09:30:00" 
     }, 
     { 
     "code":"961296", 
     "name":"Madurai", 
     "time":"09:45:00" 
     } 
     ] 
     ] 
     } 
     } 
     ... 
    }; 

Мой HTML шаблонный является:

   <tbody ng-repeat=" i in myTest.buslist.searchResult" > 
       <tr> 
        <td>{{i.arrivalTime}}</td> 
        <td>{{i.availableSeats}}</td> 

        <td> 
        <p ng-repeat="m in i.boardingPointDetails">{{m.name}}</p> 
        </td> 
       </tr> 
      </tbody> 

Я хочу, чтобы фильтровать данные, основанные на выбранные значения. Я пытался что-то вроде этого:

$scope.matched = $scope.myTest.buslist.searchResult.boardingPointDetails.name.indexOf(data); 

т.е. Выбрана параметры должны соответствовать поле «имя» в «boardingPointDetails», но это не удается. Заранее спасибо.

ответ

0

С $scope.myTest.buslist.searchResult.boardingPointDetails - это массив $scope.myTest.buslist.searchResult.boardingPointDetails.name недействителен.

Вам нужно использовать функцию Array, чтобы получить правильный результат:

$scope.matched = $scope.myTest.buslist.searchResult.boardingPointDetails.filter(function(el) { 
    return el.name === data; 
}).length > 0; 

EDIT:

Из ваших комментариев я понимаю, вы хотите, чтобы получить boardPointDetails, который имеет тот же name как один из параметров data. Где data - это массив строк.

Это сделает работу:?.

$scope.matched = $scope.myTest.buslist.searchResult.boardingPointDetails.filter(function(el) { 
    return data.indexOf(el.name) === 1; 
}); 
+0

Он не работает .. :( – keerthi

+0

, что делает 'data' содержит то, что это структура –

+0

данных нет ничего, но выбранные опции Это находится в формат массива. $ scope.myval = ["Adyar", "Paris", "central"]; – keerthi

Смежные вопросы