2016-07-06 5 views
0

извините, если это похоже на дубликат, но я попробовал другие ответы, и я не могу найти что-то, что работает правильно. Я создаю AngularJS SPA, и у меня есть данные в следующем формате:Группировка вложенного массива с помощью underscore.js

"folders": [ 
    { 
    "id": 1, 
    "password": "WPAUGOR452", 
    "year": 2013 
    }, 
    {   
    "id": 2, 
    "password": "WPAUGOR452", 
    "year": 2013 
    }, 
    {   
    "id": 3, 
    "password": "DFGOERJ305", 
    "year": 2014 
    } 

и многие другие.

Я хочу папки должны быть сгруппированы таким образом, что это так:

"folders": [ 
    "2013": [ 
    "WPAUGOR452": [ 
     { 
     "id": 1, 
     "password": WPAUGOR452, 
     "year": 2013, 
     }, 
     { 
     "id": 2, 
     "password": WPAUGOR452, 
     "year": 2013, 
     }    
    ] 
    ], 
    "2014": [ 
    "DFGOERJ305": [ 
     {   
     "id": 3, 
     "password": "DFGOERJ305", 
     "year": 2014 
     } 
    ] 
    ] 
] 

Существует намного больше реальные данные, но я раздел ее до действительно то, что я хочу, чтобы сгруппировать по. В настоящее время в каждой папке есть пароль и год, и я хочу, чтобы они были сгруппированы по паролю в течение нескольких лет, чтобы я мог отображать год в пользовательском интерфейсе, а затем все папки, соответствующие конкретному паролю.

Хотя пожалуйста, обратите внимание, что я хочу, чтобы отобразить год и пароль в пользовательском интерфейсе (только один раз, с сгруппированными пунктами ниже!)

Если дальше деталь необходима, пожалуйста, спрашивайте.

ответ

2

Это должно делать то, что вы хотите:

var result = _.chain(folders) 
    .groupBy('year') 
    .mapObject(year => _.groupBy(year, 'password')) 
    .value(); 

и версию с полным определением функции:

var result = _.chain(folders) 
    .groupBy('year') 
    .mapObject(function(year) { 
     return _.groupBy(year, 'password'); 
    }) 
    .value(); 

Решения первой группы по годам, а затем группы пароля для каждого года группы.

+0

Это работало как шарм! Я хотел бы сказать, что Visual Studio 2013 говорит о синтаксической ошибке с символом '>' в '=>'. JavaScript работает, хотя любые идеи о том, почему это может быть? Большое спасибо! –

+0

Получается, что '=>' не работает в IE 10. Есть ли альтернативный синтаксис, который я могу использовать? –

+0

Отлично! Полный функциональный метод работает! Я попытался изменить код для работы с функцией, но я делал что-то действительно глупое. Спасибо за вашу помощь! –

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