假设我有一些对象的数组:
var array = [{id: 1, date: Mar 12 2012 10:00:00 AM}, {id: 2, date: Mar 8 2012 08:00:00 AM}];
如何从最接近当前日期和时间的日期开始按日期元素对此数组进行排序?请记住,数组可能有很多对象,但为了简单起见,我使用了2 .
我会使用sort函数和自定义比较器吗?
UPDATE
在我的具体情况下,我希望日期安排从最新到最旧 . 结果我不得不颠倒简单函数的逻辑:
array.sort(function(a, b) {
a = new Date(a.dateModified);
b = new Date(b.dateModified);
return a>b ? -1 : a<b ? 1 : 0;
});
这会对最近的日期进行排序 .
15 回答
@Phrogz答案都很棒,但这是一个很好的,更简洁的答案:
在这里找到:Sort date in Javascript
我能够使用以下行完成排序:
您的数据需要一些更正:
更正数据后,您可以使用以下代码:
我刚刚采取了上面描述的Schwartzian transform并作为功能 . 它需要一个
array
,排序function
和一个布尔值作为输入:如果像我这样你有一个日期格式为
YYYY[-MM[-DD]]
的数组,你想在不太具体的日期之前订购更具体的日期,我想出了这个方便的功能:最简单的答案
更多通用答案
或者更简洁:
通用,强大的答案
在所有阵列上使用Schwartzian transform定义自定义的非可枚举
sortBy
函数:像这样使用它:
如果您的日期无法直接比较,请在其中列出可比日期,例如
如果返回值数组,也可以使用此选项按多个条件排序:
有关详细信息,请参阅http://phrogz.net/JS/Array.prototype.sortBy.js .
对于想要按日期排序的任何人(英国格式),我使用以下内容:
我推荐GitHub: Array sortBy - 使用Schwartzian transform的
sortBy
方法的最佳实现但是现在我们将尝试这种方法Gist: sortBy-old.js .
让我们创建一个方法来排序能够通过某些属性排列对象的数组 .
创建排序功能
设置未排序的数据
使用它
最后,我们按
"date"
属性排列数组为string
如果要忽略字母大小写,请设置
"parser"
回调:如果要将"date"字段视为
Date
类型:在这里你可以玩上面的例子:
jsbin.com/lesebi
我将在这里添加它,因为一些用途可能无法解决如何反转这种排序方法 .
要按“出现”排序,我们可以简单地交换a&b,如下所示:
请注意,
a
现在位于左侧,b
位于右侧,:D!您可以在下划线js中使用sortBy .
http://underscorejs.org/#sortBy
样品:
在纠正JSON后,这应该工作 .
你也可以用这个link . 它提供了可以传递给泛型
sort()
函数的回调函数当你的日期采用这种格式时(dd / mm / yyyy),这应该可以 .
sortByDate(myArr);