Javascript 如何使用Backbone.js中的groupBy对集合进行分组?
示例集合(仅显示模型): 如何使用下划线.js的groupBy函数对具有相同日期的模型进行分组代码> 您也可以使用pass自定义函数,但在这种情况下,这不是必需的,因为上面的属性快捷方式语法可以正常工作Javascript 如何使用Backbone.js中的groupBy对集合进行分组?,javascript,backbone.js,underscore.js,Javascript,Backbone.js,Underscore.js,示例集合(仅显示模型): 如何使用下划线.js的groupBy函数对具有相同日期的模型进行分组 您也可以使用pass自定义函数,但在这种情况下,这不是必需的,因为上面的属性快捷方式语法可以正常工作 _.groupBy(data, function(row) { return row.date; }); 演示: > _.groupBy(data, 'date') { 'Thu Mar 29 2012': [ { name: 'Bob', date: 'Thu Mar 29 2012
_.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' } ] }
>
ThiefMaster的答案是完全正确的,但它给我带来了一些困惑,因为我正在搜索一个解决方案,以获得一个backbone.js集合,如标题所示 如果问题对象是主干集合,我们应按日期对模型进行以下分组:
\u.groupBy(collection.models,function(model){
返回模型。获取('日期')
});
我希望它能对您有所帮助如果您要对实际的主干集合进行分组,您可以使用主干方法groupBy,它隐式地使用下划线u.groupBy功能。在我看来,这是一个更干净的方法
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'));
}
}
collection.groupBy( function(model){
return model.get('date');
});
对于那些使用下划线代替下划线的用户,您可以使用\uu0.method()
访问器获得相同的结果
collection.groupBy(_.method('get', 'date'));
您忘记了日期之前的逗号:是否有方法为每个组设置视图,并在一个模型从一个组移动到另一个组时自动同步这些视图?例如,如果更改模型上的日期,则应将其移动到另一个组,并且视图必须相应地更新。有什么方法可以半自动(可能是使用木偶)或手动完成此操作?这不适用于实际的主干收集,bullfrog的答案是正确的。这是对所问问题的实际答案。这是描述如何使用主干进行分组的答案。上面的答案使用下划线来描述hot to group你甚至可以使用缩写:collection.groupBy('date')@IanS也许你的属性名称不正确,没有任何信息痕迹很难知道原因,但我怀疑我很可能使用的是旧版本的主干网。。。这个答案中的完整代码对我很有用。这也是问题的实际答案。
collection.groupBy(_.method('get', 'date'));