按日期对对象的嵌套数组进行排序

tam*_*rus 4 javascript arrays sorting date object

我正在尝试排序一个看起来像这样的数组:

var dateGroups = [
  [
     {age:20, date: Fri Feb 03 2012 14:30:00 GMT+1100 (EST)}, 
     {age:12, date: Fri Feb 03 2012 18:20:00 GMT+1100 (EST)}, 
     {age:18, date: Fri Feb 03 2012 21:43:00 GMT+1100 (EST)}
  ],
  [
     {age:32, date: Fri Feb 01 2012 10:54:00 GMT+1100 (EST)}, 
     {age:44, date: Fri Feb 01 2012 11:45:00 GMT+1100 (EST)}, 
  ],
  [
     {age:22, date: Fri Feb 05 2012 10:54:00 GMT+1100 (EST)}, 
     {age:22, date: Fri Feb 05 2012 18:22:00 GMT+1100 (EST)},
  ]
]
Run Code Online (Sandbox Code Playgroud)

dateGroups嵌套数组中的对象已经按升序排序,但我还想根据分组的日期对数组进行排序.

在这种情况下,数组应如下所示:

var dateGroups = [
  [
     {age:32, date: Fri Feb 01 2012 10:54:00 GMT+1100 (EST)}, 
     {age:44, date: Fri Feb 01 2012 11:45:00 GMT+1100 (EST)}, 
  ],
  [
     {age:20, date: Fri Feb 03 2012 14:30:00 GMT+1100 (EST)}, 
     {age:12, date: Fri Feb 03 2012 18:20:00 GMT+1100 (EST)}, 
     {age:18, date: Fri Feb 03 2012 21:43:00 GMT+1100 (EST)}
  ],
  [
     {age:22, date: Fri Feb 05 2012 10:54:00 GMT+1100 (EST)}, 
     {age:22, date: Fri Feb 05 2012 18:22:00 GMT+1100 (EST)},
  ]
]
Run Code Online (Sandbox Code Playgroud)

用于排序的函数还应返回dateGroups的新排序版本.

我已经尝试过使用Underscore.js的sortBy()函数,但我无法弄清楚如何根据其中一个对象内的属性值对数组进行排序.是否有一种特定的方式来排序Date对象?或者它们的排序方式与数字或字母相同?

bez*_*max 9

根据Underscore.js文档,您应该为该原因编写自己的迭代器.像这样的东西:

_.sortBy(dateGroups, function(arrayElement) {
    //element will be each array, so we just return a date from first element in it
    return arrayElement[0].date.getTime();
});
Run Code Online (Sandbox Code Playgroud)


Mat*_*eer 5

您可以通过将自定义排序函数传递给Array.sort.

dateGroups.sort(function(a, b) {
    return b[0].date.getTime() - a[0].date.getTime();
});
Run Code Online (Sandbox Code Playgroud)

自定义函数需要返回一个小于零(a 在 b 之前)、大于零(a 在 b 之后)或零(a 和 b 相等)的数字。