Javascript 在主干集合中对相似模型进行分组
我有一个主干集合,我在其中迭代并查找mdl.get('group')。这将返回:Javascript 在主干集合中对相似模型进行分组,javascript,backbone.js,Javascript,Backbone.js,我有一个主干集合,我在其中迭代并查找mdl.get('group')。这将返回: [未定义,未定义,组,组,组,未定义,组,组,组,未定义,组,组] 我希望它返回这些组模型的数组(或集合): [未定义,未定义,[组],未定义,[组],未定义,[组] 我正试图想出最好的方法: 遍历对象 返回“未定义”值而不更改它们 查找具有相似值的同级 将它们折叠到对象内的数组中 与u.groupBy方法非常相似,但我需要在对象中保持模型的正确顺序 我很想知道如何处理这个问题。到目前为止,我还不知道如何正确处
[未定义,未定义,组,组,组,未定义,组,组,组,未定义,组,组]
我希望它返回这些组模型的数组(或集合):
[未定义,未定义,[组],未定义,[组],未定义,[组]
我正试图想出最好的方法:
- 遍历对象
- 返回“未定义”值而不更改它们
- 查找具有相似值的同级
- 将它们折叠到对象内的数组中
谢谢!经过一些修改后,我提出了这个解决方案。我扩展了Array.prototype,以便您可以轻松地将其放入。您可以使用它进行下划线扩展或集合。prototype方法:
Array.prototype.pack = function(field) {
var result = [], target, lastItem;
while(this.length > 0) {
var item = this.shift();
if(item === undefined) {
target = result;
} else {
if(!lastItem || item[field] != lastItem[field]) {
target = [];
result.push(target);
}
}
target.push(item);
lastItem = item;
}
return result;
}
注意,它并没有经过严格的测试,当然它可以被改进,但应该会给你一个想法。
您可以这样使用它:
models.pack("name")
其中模型是一个普通数组,如[undefined,{field:value}]
尽量简明扼要。此处有一个正在运行的演示:经过一些修改后,提出了此解决方案。我扩展了Array.prototype,以便您可以轻松地将其放入。您可以使用它进行下划线扩展或集合。prototype方法:
Array.prototype.pack = function(field) {
var result = [], target, lastItem;
while(this.length > 0) {
var item = this.shift();
if(item === undefined) {
target = result;
} else {
if(!lastItem || item[field] != lastItem[field]) {
target = [];
result.push(target);
}
}
target.push(item);
lastItem = item;
}
return result;
}
注意,它并没有经过严格的测试,当然它可以被改进,但应该会给你一个想法。
您可以这样使用它:
models.pack("name")
其中模型是一个普通数组,如[undefined,{field:value}]
尽量简洁。这里有一个工作演示:您可以使用collection.groupBy()来完成此操作。首先,groupBy“group”创建分组模型的散列,然后使用collection.map将同级映射到模型上 这是一把小提琴:
可以使用collection.groupBy()执行此操作。首先,groupBy“group”创建分组模型的散列,然后使用collection.map将同级映射到模型上 这是一把小提琴:
澄清:除了常规程序外,如果相似的模型具有相同的给定属性,则会对其进行分组?听起来不错,相似的模型是根据给定属性进行分组的。如果兄弟姐妹之间没有此属性(未定义),则会对其进行分组然后我们继续下一组模型。澄清:除了常规程序外,如果相似模型具有相同的给定属性,则会对其进行分组?听起来不错,相似模型是根据给定属性进行分组的。如果兄弟姐妹因没有此属性(未定义)而分开,则我们继续下一组模型。