2012-03-31 27 views

回答

5

使用_.groupBy(data, 'date');

您也可以使用通過自定義功能,但在這種情況下,它與上面的屬性快捷語法工作正常,沒有必要。

_.groupBy(data, function(row) { 
    return row.date; 
}); 

演示:

> _.groupBy(data, 'date') 
{ 'Thu Mar 29 2012': [ { name: 'Bob', date: 'Thu Mar 29 2012' } ], 
    'Fri Mar 30 2012': 
    [ { name: 'James', date: 'Fri Mar 30 2012' }, 
    { name: 'Dylan', date: 'Fri Mar 30 2012' } ], 
    'Sat Mar 31 2012': [ { name: 'Stanley', date: 'Sat Mar 31 2012' } ] } 
> _.groupBy(data, function(row) { return row.date }); 
{ 'Thu Mar 29 2012': [ { name: 'Bob', date: 'Thu Mar 29 2012' } ], 
    'Fri Mar 30 2012': 
    [ { name: 'James', date: 'Fri Mar 30 2012' }, 
    { name: 'Dylan', date: 'Fri Mar 30 2012' } ], 
    'Sat Mar 31 2012': [ { name: 'Stanley', date: 'Sat Mar 31 2012' } ] } 
> 
+2

有沒有建立視圖的方法對於每個組而言,當一個模型從一個組移動到另一個組時,會自動同步這些視圖?例如,如果我在模型上更改日期,則應將其移至另一個組,並且視圖必須相應更新。任何方式半自動(可能使用木偶)或我將不得不手動做到這一點? – ragulka 2013-04-08 20:27:23

+3

這對於實際骨幹收藏不起作用,牛蛙的答案是正確的。 – 2013-11-29 02:31:54

10

ThiefMaster答案是完全有效的,但它給我造成了一些混亂,因爲我正在尋找一個Backbone.js的集合解決方案爲標題所示。

如果問題對象是骨幹集,我們應做到以下幾點,以組按日期的車型:

_.groupBy(collection.models, function(model){ 
    return model.get('date') 
}); 

我希望它能幫助

+0

這也是問題的實際答案。 – dcarson 2013-06-07 02:12:41

4
var groups =collection.groupBy(function(model) { return model.get('date'); }); 

//iterate over groups 
for(date in groups) { 
    var models = groups[date]; 
    console.log('date: '+date); 
    for (var model_idx in models) { 
     console.log(' name: '+ models[model_idx].get('name')); 
    } 
} 
47

如果是分組實際骨幹集合您可以使用隱式使用下劃線_.groupBy功能的主幹方法groupBy。我認爲這是一種更清潔的方法。

collection.groupBy(function(model){ 
    return model.get('date'); 
}); 
+1

這是所問問題的實際答案。 – dcarson 2013-06-07 02:11:47

+0

這是描述如何使用主幹進行分組的答案。上面的答案通過使用下劃線描述熱點組 – 2013-06-20 07:37:31

+8

甚至可以使用簡寫:collection.groupBy('date') – fadomire 2014-03-03 16:12:38

0

對於使用Lodash而不是下劃線,你可以使用_.method()訪問達到同樣的效果,

collection.groupBy(_.method('get', 'date'));