Safari不像其他浏览器那样对对象数组进行排序

var myArray = [{date:"2013.03.01"},{date:"2013.03.08"},{date:"2013.03.19"}]; 

我试过了:

 function(a,b){ return b.date > a.date; } 

 function(a,b){ return b.date - a.date; } 

Chrome和Firefox中的console.log为我提供了所需的输出:

 "2013.03.19", "2013.03.08", "2013.03.01" 

Safari提供原始排序:

 "2013.03.01", "2013.03.08", "2013.03.19" 

为什么?

JavaScript中的排序函数应该返回实数 – 不是true或false,还是字符串或日期。 该数字是正数,负数还是零会影响排序结果。

尝试这种排序function(它也将按反向字母顺序正确排序任何字符串):

 myArray.sort(function(a,b){ return (b.date > a.date) ? 1 : (b.date < a.date) ? -1 : 0; }); 

"2013.03.01"不是约会对象。 这是一个字符串。

为了按日期正确排序,您需要将这些转换为日期(时间戳)。

 var myArray = [{date:"2013.03.01"},{date:"2013.03.08"},{date:"2013.03.19"}]; myArray.sort(function(a,b){ return Date.parse(b.date) - Date.parse(a.date); }); 

您也可以使用直接字符串比较对它们进行排序:

 myArray.sort(function(a,b){ return b.date.localeCompare(a.date); });