14
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"

なんで?

4

2 に答える 2

29

JavaScriptのソート関数は、実数を返すことになっています。trueまたはfalse、あるいは文字列や日付ではありません。その数が正、負、またはゼロのいずれであるかは、ソート結果に影響します。

この並べ替え関数を試してください(文字列をアルファベットの逆順でも正しく並べ替えます)。

myArray.sort(function(a,b){
  return (b.date > a.date) ? 1 : (b.date < a.date) ? -1 : 0;
});
于 2013-03-19T18:43:38.543 に答える
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);
});
于 2013-03-19T18:43:39.597 に答える