2016-06-17 2 views
1

Я назначил задачу группировать данные в угловых js, используя знак подчеркивания js.underscore js groupby array внутри JSON

Мой JSON:

$scope.myData= { 
"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": "Nerkundram", 
         "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" 
        } 
       ] 
      } 
     ] 
    } 
} 

Я не могу сгруппировать данные, используя поле "имя", используя подчеркиванием JS. Я пробовал:

$scope.groups = _.groupBy($scope.myData,function(element) { 
    return element.searchResult.boardingPointDetails.name; 
}); 

Но это не удается. Нужна помощь. Заранее спасибо.

+2

Поскольку '' searchResult' И boardingPointDetails' массивы, не объекты - так 'вернуть element.searchResult [0] .boardingPointDetails [0] .name; ', вероятно, будет работать для первых элементов внутри этих массивов –

+0

как я могу заставить его получать работы для всех элементов. @ Alon Eiten – keerthi

+0

Трудно ответить на это, потому что вы хотите сгруппировать несколькими клавишами. Поэтому вам нужно показать желаемый результат, который вы ожидаете от группы по функциям. –

ответ

2

Вот мое решение для вашей проблемы:

var tempResult = []; 
_.each($scope.myData.buslist.searchResult, function(result) { 
    _.each(result.boardingPointDetails, function(detail) { 
     var item = { name: detail.name, availableSeats: result.availableSeats }; 
     tempResult.push(item); // make an array of items with needed data on same nesting level 
    }); 
}); 

var endResult = _.groupBy(tempResult, 'name'); // group the items by name 

Посмотри работает в вашей ситуации: JsFiddle

+0

Большое спасибо – keerthi

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