5

信じがたいことですが、これは 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 を実行しています

4

5 に答える 5

11

array.sort()配列を辞書順にソートします。つまり、配列の値は文字列として解釈され、整数ではなく文字列のように (アルファベット順に) ソートされます。

この動作については、http ://www.javascriptkit.com/javatutors/arraysort.shtml でも説明されています。

于 2013-02-26T08:12:13.003 に答える
7

ここに来て、Chrome での並べ替えの何が問題なのかを理解しようとしている人のために、ここにその例を示しますunstable sort: https://jsfiddle.net/wujpw8bo/

修正方法:

不安定な並べ替えアルゴリズムは、安定するように特別に実装できます。これを行う 1 つの方法は、キー比較を人為的に拡張することです。これにより、他の点では等しいキーを持つ 2 つのオブジェクト間の比較が、元の入力リスト内のエントリの順序をタイ ブレーカーとして使用して決定されます。ただし、この順序を覚えておくには、追加の時間とスペースが必要になる場合があります。 https://en.wikipedia.org/wiki/Sorting_algorithm#Stability

于 2017-01-11T06:23:57.500 に答える
1

次の方法を使用する必要があります。

abc =[10,2,4,1]; abc.sort(function( a , b ){
  return a-b;
});

http://www.w3schools.com/jsref/jsref_sort.asp

于 2013-02-26T08:07:05.880 に答える
-1

2 番目のsort()に括弧がありません

x.sort()

編集: 自分で試してみましたが、ブラケットを使用しても機能しません。

これらの質問をチェックしてください。多分彼らはあなたの問題を解決するでしょう。

Chrome でオブジェクトの配列を並べ替える

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
于 2013-02-26T07:57:30.803 に答える