我有以下代码,它根据日期排序数组中的javascript对象列表。数据来自XML文件。日期格式如下:MM-DD-YYYY
concert=new Object();
concert.performer=performerName;
concert.date=concertDate;
concerts[0]=concert; //adding to array in a for loop
所以在这个阶段我的音乐会阵列中有很多音乐会对象。 然后我去对它进行排序并将其输出到表格中:
sortedConcerts = concerts.sort(sortConcerts);
function sortConcerts(a, b){
var firstConcert=new Date(a.date);
var secondConcert=new Date(b.date);
return firstConcert-secondConcert;
}
然后我有一个新的排序数组,我用表或其他什么打印出来。
我的问题是,这在IE和Chrome中运行良好,但在Firefox中却不行...... Firefox不喜欢什么?
答案 0 :(得分:2)
您的日期格式(“MM-DD-YYYY”)无效。因此,您的“日期”实例始终相同。
你可以翻转字符串,只是比较字符串:
function sortConcerts(a, b) {
function flipDate(d) {
return d.replace(/(\d\d)-(\d\d)-(\d\d\d\d)/, "$3-$1-$2");
}
var d1 = flipDate(a.date), d2 = flipDate(b.date);
return d1 > d2 ? 1 : d2 > d1 ? -1 : 0;
}
Firefox坚持遵循IETF标准的日期(我认为它最初来自RFC-822)。
如果有很多音乐会,那么在排序之前翻转所有音乐会的日期会更有效率。
答案 1 :(得分:2)
Firefox似乎接受:
new Date("Jan 1 2009");
new Date("January 1 2009");
new Date("1 1 2009");
new Date("1/1/2009");
但是,使用连字符会为您提供无效的日期格式,这会导致数学运算的NaN(在您的情况下为减法);
new Date("1/1/2009") - new Date("1-1-2009"); // NaN in Firefox, 0 in other browsers
new Date("1/1/2009") - new Date("1/1/2009"); // 0 in all browsers.
MDN有一篇关于有效日期格式的文章。
答案 2 :(得分:0)
以下是功能代码fiddle
我在IE,Chrome& FF。
答案 3 :(得分:0)
尝试使用 loadesh 中的 sortBy
const result = sortBy(array, item => item.your.deep.data)
return (currentDirection === 'asc') ? result : result.reverse()