javascript - 对对象数组进行分组和排序的最佳方法

标签 javascript underscore.js

我有以下演示数据。

var demoData= [{"EntryGroupDate":"November 2013", 
                "DisplayName": "Hans Meier (November)", 
                "EntryGroupDateSort": 11},
               {"EntryGroupDate":"August 2013", 
                "DisplayName": "Franz Mueller (August)", 
                "EntryGroupDateSort": 8},
               {"EntryGroupDate":"November 2013", 
                "DisplayName": "Franz Huber (November)", 
                "EntryGroupDateSort": 11},
               {"EntryGroupDate":"Juli 2013", 
                "DisplayName": "Franz Schmidt (Juli)", 
                "EntryGroupDateSort": 7}
              ];

最好的方法是先按 EntryGroupDateSort 对它们进行分组,然后再按相同的标准对它们进行排序。对于输出,我需要原始数组的所有信息。

我刚刚摆弄了 UnderscoreJS,但没有通过使用以下代码获得预期的结果。

var myPersons = demoData;
var groups = _.groupBy(myPersons, "EntryGroupDate");
console.log(groups);
groups = _(groups).sortBy(function (item) {
    return item.EntryGroupDateSort;
});
console.log(groups);

第一个控制台输出显示了数据排序后我想要的格式。

希望有人能指出我正确的方向。

最佳答案

您可以先对整个数组进行排序,然后再分组:

JSFIDDLE

var demoData= [{"EntryGroupDate":"November 2013", 
                "DisplayName": "Hans Meier (November)", 
                "EntryGroupDateSort": 11},
               {"EntryGroupDate":"August 2013", 
                "DisplayName": "Franz Mueller (August)", 
                "EntryGroupDateSort": 8},
               {"EntryGroupDate":"November 2013", 
                "DisplayName": "Franz Huber (November)", 
                "EntryGroupDateSort": 11},
               {"EntryGroupDate":"Juli 2013", 
                "DisplayName": "Franz Schmidt (Juli)", 
                "EntryGroupDateSort": 7}
              ];


_.sortBy( demoData, function(x){ return x.EntryGroupDateSort; } );
groups = _.groupBy( demoData, 'EntryGroupDate' );
console.log( groups );

如果你想在分组后进行排序,那么你可以使用(这次在 DisplayName 上排序):

JSFIDDLE

groups = _.groupBy( demoData, 'EntryGroupDate' );
for ( var key in groups )
    groups[key].sort( function(a,b){ var x = a.DisplayName, y = b.DisplayName; return x === y ? 0 : x < y ? -1 : 1; } );
console.log( groups );

关于javascript - 对对象数组进行分组和排序的最佳方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20330050/

相关文章:

node.js - Parse-Server 本地安装 - 外部模块

jquery - Backbone模板渲染后如何调用jQuery代码?

javascript - 如何跳出 forEach 循环?

javascript - 谷歌浏览器扩展中的 JS 模板( list v2)

javascript - JS->对输入进行表单验证。使用for循环获取所有输入索引

javascript - Backbone.js 查看点击事件选择器语法?

javascript - 我可以包含来自 src 的文本/模板脚本吗?

javascript - 为什么 UpdatePanel 会在几分钟后停止工作?

Javascript 即使有额外的 ../也能找到外部文件

javascript - 使用 underscore.js 展平对象的 javascript 数组