Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 按日期对对象的嵌套数组排序_Javascript_Arrays_Sorting_Object_Date - Fatal编程技术网

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

Javascript 按日期对对象的嵌套数组排序,javascript,arrays,sorting,object,date,Javascript,Arrays,Sorting,Object,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

我正在尝试对如下所示的数组进行排序:

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)},
  ]
]
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)},
  ]
]
_.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();
});
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();
});
日期组嵌套数组中的对象已按升序排序,但我还想根据分组的日期对数组本身进行排序

在这种情况下,阵列应如下所示:

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)},
  ]
]
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)},
  ]
]
_.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();
});
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的函数,但我不知道如何根据其中一个对象中属性的值对数组进行排序。是否有特定的方式对日期对象进行排序?或者它们的排序方式与数字或字母相同?

您可以通过将自定义排序函数传递给
数组进行排序

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

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

根据下划线.js文档,您只需为此编写自己的迭代器即可。大概是这样的:

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)},
  ]
]
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)},
  ]
]
_.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();
});
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();
});

据我所知,您希望对内部组进行排序,以便首先显示早期日期,然后根据组的第一个日期对组进行排序。 可以这样做:

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)},
  ]
]
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)},
  ]
]
_.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();
});
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()

您可以在此处找到有关此主题的一些有用答案: