为什么数组在增加日期或递减日期的javascript中没有排序?

我正在尝试对我的对象数组进行排序。对象有日期属性。我需要按升序或降序日期对数组进行排序。我试试这样

https://jsfiddle.net/rxaLutgn/1/

function sort_by(field, reverse, primer) { var key = primer ? function (x) { return primer(x[field]) } : function (x) { return x[field] }; reverse = !reverse ? 1 : -1; return function (a, b) { return a = key(a), b = key(b), reverse * ((a > b) - (b > a)); } } 

它不按升序或降序对数组进行排序。

你的function搞砸了,试试吧

 function sort_by(field, reverse, primer) { var key = primer ? function (x) { return primer(x[field]) } : function (x) { return x[field] }; reverse = !reverse ? 1 : -1; return function (a, b) { a = new Date(key(a)), b = new Date(key(b)); return reverse * (ab); } } 

您需要将日期字符串转换为日期以进行排序,还需要更改返回代码。

工作小提琴

如果您期望所有日期,该function正常工作。 查看您的数据有一些无效日期,如“ – ”

如果你不能修改数据或期望一个确定的日期总是那么你需要修改你的function来做这样的事情(或以某种方式处理你喜欢的)

 function sort_by(field, reverse, primer) { var key = primer ? function (x) { return primer(x[field]) } : function (x) { return x[field] }; reverse = !reverse ? 1 : -1; return function (a, b) { a = new Date(key(a))=='Invalid Date'?0:new Date(key(a)); b = new Date(key(b))=='Invalid Date'?0:new Date(key(b)); return reverse * (ab); } } 

@void的所有道具都是他的回答。 我刚刚更新,因为有一个重复的问题提出来,我没有代表对这个问题的评论或@ void的答案在这篇文章