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"
为什么?
答案 0 :(得分:25)
JavaScript中的排序函数应该返回一个实数 - 不是true或false,还是字符串或日期。该数字是正数,负数还是零会影响排序结果。
尝试此排序功能(也会按反向字母顺序正确排序任何字符串):
myArray.sort(function(a,b){
return (b.date > a.date) ? 1 : (b.date < a.date) ? -1 : 0;
});
答案 1 :(得分:1)
"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);
});