Рекурсивное использование groupBy на backbone.js коллекция

#javascript #backbone.js #underscore.js

#javascript #backbone.js #underscore.js

Вопрос:

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

Кажется, я не могу сделать это рекурсивно. Это то, что у меня есть до сих пор, чтобы возвращать группы элементов

 var groupedItems = this.collection.groupBy(function(model){ return model.get('description');});
  

Как я могу запустить его снова, чтобы получить этот вывод и сгруппировать по цветам? Я думаю, мне может понадобиться снова превратить выходные данные в коллекцию?

Любая помощь с благодарностью

Комментарии:

1. Функция groupBy Backbone — это просто прокси для подчеркивания groupby , поэтому вы используете это. Что-то вроде var groupedColours = _.groupBy(groupedItems, function (item) {return item.get('colour');},this);

2. Спасибо за ответ @Jack. Вы указали мне правильный путь, и теперь у меня есть то, что работает! Это код, к которому я пришел. var finalGroupedArray = []; var groupedItems = this.collection.groupBy(function(model){ return model.get('description');}); var count = 0; for(var description in groupedItems){ var groupedColours = _.groupBy(groupedItems[Object.keys(groupedItems)[count]], function (item) {return item.get('colour');},this); finalGroupedArray.push(groupedColours); count ; }

3. Рад помочь, хотя я думаю, что вы забыли опубликовать код, к которому пришли.

4. хех, да, я немного новичок в стеке — я нажал return слишком рано! Я добавил его сейчас, но он не очень хорошо отформатирован

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

Ответ №1:

В ответ на мой первоначальный вопрос с решением, к которому Джек указал мне путь, это код, который я использовал для группировки коллекции по одному атрибуту, за которым следует подгруппа другого атрибута. При этом используется символ подчеркивания groupBy в результате основной groupBy.

 var finalGroupedArray = [];
var groupedItems = this.collection.groupBy(function(model){ return model.get('description');});
var count = 0;

for(var description in groupedItems){
    var groupedColours = _.groupBy(groupedItems[Object.keys(groupedItems)[count]], function (item) {return item.get('colour');},this);
    finalGroupedArray.push(groupedColours);
    count  ;
}