Javascript排序在Firefox中不起作用

时间:2011-12-13 14:33:01

标签: javascript

我有以下代码,它根据日期排序数组中的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不喜欢什么?

4 个答案:

答案 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()