Safari不排序像其他浏览器对象数组[复制](Safari doesn't sort ar

2019-07-22 01:13发布

这个问题已经在这里有一个答案:

  • 为什么不会Safari 5的排序对象数组? 1个回答
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"

为什么?

Answer 1:

在JavaScript中的排序功能,应该返回一个实数 - 不是真或假或字符串或日期。 无论这个数字是正,负或零影响排序结果。

试试这个排序功能(这也将正确反向字母顺序任意字符串进行排序):

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


Answer 2:

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

您可能还可以使用直接串comparasions也对它们进行排序:

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


文章来源: Safari doesn't sort array of objects like others browsers [duplicate]