根据对象的日期年份将对象数组拆分为新数组

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数组?是否有更好的方法来存储此类数据?

tjd*_*ett 9

考虑使用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)

根据您的使用情况,我可以看到使用数组数组或数组对象映射的原因.如果您正在查找索引,请务必使用后者.