按日期属性对对象数组进行排序
问题:您有一个具有日期属性的对象数组,并且想要根据最接近的日期按降序排序
解决方案:
使用自定义比较器:
一种方法是使用内置 sort( ) 方法以及自定义比较器函数。比较器函数将两个对象 a 和 b 作为参数,如果 a 应该在 b 之前、b 之后,或者它们应该保持在相同位置,则分别返回负值、正值或零值。
为了按日期排序,比较器函数会将日期字符串转换为 JavaScript 日期并减去它们:
array.sort(function(a, b) { return new Date(b.date) - new Date(a.date); });
通用解决方案:
更通用的解决方案是定义一个自定义 sortBy() 函数,对数组执行 Schwartzian 变换。此函数可用于按任何属性排序,而不仅仅是日期。
(function() { if (!Array.prototype.sortBy) Array.prototype.sortBy = sb; function sb(f) { // ... implementation } })();
使用此自定义函数,您可以按日期属性排序,如下所示:
array.sortBy(function(o) { return o.date });
处理复杂的日期比较:
如果您的日期属性无法直接比较,您可以从它,例如 JavaScript Date 对象:
array.sortBy(function(o) { return new Date(o.date) });
按多个条件排序:
您还可以使用 sortBy() 函数按多个条件排序。只需从比较器函数返回一个值数组:
// Sort by date, then score (reversed), then name array.sortBy(function(o) { return [o.date, -o.score, o.name] });
以上是如何在 JavaScript 中按日期降序对对象数组进行排序?的详细内容。更多信息请关注PHP中文网其他相关文章!