tam*_*rus 5 javascript arrays grouping date
我有一个名为objarray的对象数组.每个对象看起来像这样:
var object = {
age: "45"
coords: "-37.807997 144.705784"
date: Sun Jul 28 2002 00:00:00 GMT+1000 (EST)
}
Run Code Online (Sandbox Code Playgroud)
(日期是Date对象)
我需要根据日期将每个对象推送到一个新的数组中.我希望最终结果如下所示:
var dateGroups = [[object, object, object],[object, object], [object, object, object]];
Run Code Online (Sandbox Code Playgroud)
dateGroups中的每个数组都包含具有相同日期的对象.
这可能与数组有关吗?以前我生成了一个新对象,其中包含按日期分组的所有objarray对象(从数据生成的日期):
var alldates = {
"1991" : [object, object, object],
"1992" : [object, object],
//etc...
}
Run Code Online (Sandbox Code Playgroud)
以上看起来在实践中似乎是一个奇怪的解决方案,我只需要能够按年访问对象:即dateGroups [0] =第一年的对象数组
我如何将数据转换为dateGroups数组?是否有更好的方法来存储此类数据?
考虑使用Underscore.js GROUPBY功能,其次是sortBy.
groupBy会产生一个结构alldates,如果你这样称呼它:
var alldates = _.groupBy(objarray, function(obj) {
return obj.date.getFullYear();
});
Run Code Online (Sandbox Code Playgroud)
sortBy 可以用来简单地按键排序,如下所示:
var dateGroups = _.sortBy(alldates, function(v, k) { return k; });
Run Code Online (Sandbox Code Playgroud)
你也可以把这两个结合起来:
var dateGroups = _.chain(objarray)
.groupBy(function(obj) { return obj.date.getFullYear(); })
.sortBy(function(v, k) { return k; })
.value();
Run Code Online (Sandbox Code Playgroud)
根据您的使用情况,我可以看到使用数组数组或数组对象映射的原因.如果您正在查找索引,请务必使用后者.