信じがたいことですが、これは Google Chrome の Javascript エンジンのバグのようです。何か不足していますか?
Chrome Javascript コンソール セッション:
> x = [10, 1]
> x.sort()
[1, 10]
> // OK. But now try this.
> x = [10, 2]
> x.sort()
[10, 2]
それはそれを並べ替えませんでした!
現在、バージョン 24.0.1312.57 m を実行しています
信じがたいことですが、これは Google Chrome の Javascript エンジンのバグのようです。何か不足していますか?
Chrome Javascript コンソール セッション:
> x = [10, 1]
> x.sort()
[1, 10]
> // OK. But now try this.
> x = [10, 2]
> x.sort()
[10, 2]
それはそれを並べ替えませんでした!
現在、バージョン 24.0.1312.57 m を実行しています
array.sort()
配列を辞書順にソートします。つまり、配列の値は文字列として解釈され、整数ではなく文字列のように (アルファベット順に) ソートされます。
この動作については、http ://www.javascriptkit.com/javatutors/arraysort.shtml でも説明されています。
ここに来て、Chrome での並べ替えの何が問題なのかを理解しようとしている人のために、ここにその例を示しますunstable sort
: https://jsfiddle.net/wujpw8bo/
修正方法:
不安定な並べ替えアルゴリズムは、安定するように特別に実装できます。これを行う 1 つの方法は、キー比較を人為的に拡張することです。これにより、他の点では等しいキーを持つ 2 つのオブジェクト間の比較が、元の入力リスト内のエントリの順序をタイ ブレーカーとして使用して決定されます。ただし、この順序を覚えておくには、追加の時間とスペースが必要になる場合があります。 https://en.wikipedia.org/wiki/Sorting_algorithm#Stability
次の方法を使用する必要があります。
abc =[10,2,4,1]; abc.sort(function( a , b ){
return a-b;
});
2 番目のsort()に括弧がありません
x.sort()
編集: 自分で試してみましたが、ブラケットを使用しても機能しません。
これらの質問をチェックしてください。多分彼らはあなたの問題を解決するでしょう。
ChromeでJavascript配列をソートしていますか?
Edit2: これは期待どおりに機能します:
var x;
x = [10, 2];
alert(x); // returns 10, 2
x.sort ( function( a , b ){
return a-b;
});
alert(x); // returns 2,10