7

重複の可能性:
ソートが整数で機能しない?
javascriptの並べ替えメソッドで数値を並べ替える方法
Array.sort()が数値を正しく並べ替えない

コード:

var x = [40,100,1,5,25,10];
x.sort();

出力:

1,10,100,25,40,5

私の期待する出力:

1,5,10,25,40,100
4

4 に答える 4

6

JavaScript配列.sort()関数は、デフォルトで、比較を行う前に配列要素を文字列に変換します。

あなたはそれを上書きすることができます:

x.sort(function(e1, e2) { return e1 - e2; });

(渡される関数は、最初の要素が2番目の要素よりも小さいか、等しいか、または大きいかに応じて、負、ゼロ、または正の数値を返す必要があります。)

私はこの言語の奇妙な側面の論理的根拠を見たことがありません。

于 2012-08-11T12:26:06.217 に答える
4

MDNArray.sortによると

compareFunctionが指定されていない場合、要素は文字列に変換し、辞書式(「辞書」または「電話帳」、数値ではない)の順序で文字列を比較することによってソートされます。たとえば、「80」は辞書式順序では「9」の前にありますが、数値ソートでは9は80の前にあります。

したがって、次のようなことを行う必要があります。

function compareNumbers(a, b)
{
  return a - b;
}
var x = [40,100,1,5,25,10];
x.sort(compareNumbers);
于 2012-08-11T12:30:43.343 に答える
3
var x = [40,100,1,5,25,10];
x.sort(function(a,b){return a-b});
于 2012-08-11T12:26:35.317 に答える
1

デフォルトではアルファベット順昇順ソート (1 文字がソートされます。

詳細については、http ://www.w3schools.com/jsref/jsref_sort.asp を参照してください。

于 2012-08-11T12:33:35.963 に答える