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

Safari doesn't sort array of objects like others browsers

本文关键字:数组 对象 排序 其他 浏览器 Safari      更新时间:2023-09-26
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"

but Safari给出原始排序:

"2013.03.01", "2013.03.08", "2013.03.19"

为什么?

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

试试这个sort函数(它也将正确地对任何字符串按反字母顺序排序):

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);
});