繁体   English   中英

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

[英]Sorting nested arrays of objects by date

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

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)},
  ]
]

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)},
  ]
]

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

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

根据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();
});

您可以通过将自定义排序函数传递给Array.sort来对它们进行排序。

dateGroups.sort(function(a, b) {
    return b[0].date.getTime() - a[0].date.getTime();
});

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

据我了解你的问题,你想要对内部组进行排序,以便首先显示早期日期,然后按照第一个日期对组进行排序。 这可以这样做:

var sortedDateGroups = dateGroups.map(function(dateGroup) {
  // sort the inner groups
  dateGroup.sort(function(a,b) { 
    return a.date.getTime() - b.date.getTime();
  });
  return dateGroup;
}).sort(function(a,b) {
  // sort the outer groups
  return a[0].date.getTime() - b[0].date.getTime();
});

当然,这可以通过下划线js以类似的方式完成:

var sortedDateGroups = _.chain(dateGroups).map(function(dateGroup) {
  return _.sortBy(dateGroup, function(inner) {
    return inner.date.getTime();
  });
}).sortBy(function(outer) {
  return outer[0].date.getTime();
}).value()

如果您有字符串格式的日期,这对我有用:

yourArray.sort((a, b) => Date.parse(b[3]) - Date.parse(a[3]))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM