Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/backbone.js/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在主干集合中对相似模型进行分组_Javascript_Backbone.js - Fatal编程技术网

Javascript 在主干集合中对相似模型进行分组

Javascript 在主干集合中对相似模型进行分组,javascript,backbone.js,Javascript,Backbone.js,我有一个主干集合,我在其中迭代并查找mdl.get('group')。这将返回: [未定义,未定义,组,组,组,未定义,组,组,组,未定义,组,组] 我希望它返回这些组模型的数组(或集合): [未定义,未定义,[组],未定义,[组],未定义,[组] 我正试图想出最好的方法: 遍历对象 返回“未定义”值而不更改它们 查找具有相似值的同级 将它们折叠到对象内的数组中 与u.groupBy方法非常相似,但我需要在对象中保持模型的正确顺序 我很想知道如何处理这个问题。到目前为止,我还不知道如何正确处

我有一个主干集合,我在其中迭代并查找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将同级映射到模型上

这是一把小提琴:


澄清:除了常规程序外,如果相似的模型具有相同的给定属性,则会对其进行分组?听起来不错,相似的模型是根据给定属性进行分组的。如果兄弟姐妹之间没有此属性(未定义),则会对其进行分组然后我们继续下一组模型。澄清:除了常规程序外,如果相似模型具有相同的给定属性,则会对其进行分组?听起来不错,相似模型是根据给定属性进行分组的。如果兄弟姐妹因没有此属性(未定义)而分开,则我们继续下一组模型。