1172

整数のみを含むことがわかっている配列から最大値と最小値を取得しようとするのは、思ったより難しいようです。

var numArray = [140000, 104, 99];
numArray = numArray.sort();
console.log(numArray)

これが表示されることを期待しています99, 104, 140000。代わりに表示されます104, 140000, 99。そのため、ソートは値を文字列として処理しているようです。

ソート関数を実際に整数値でソートする方法はありますか?

4

30 に答える 30

1709

デフォルトでは、sortメソッドは要素をアルファベット順にソートします。数値で並べ替えるには、数値の並べ替えを処理する新しいメソッドを追加するだけです(sortNumber、以下に表示)-

var numArray = [140000, 104, 99];
numArray.sort(function(a, b) {
  return a - b;
});

console.log(numArray);

ドキュメンテーション:

MozillaArray.prototype.sort()は、InfinityまたはNaNを含まない配列に対してこの比較関数を推奨しています。(Infinity - Infinity0ではなくNaNであるため)。

また、オブジェクトをキーで並べ替える例。

于 2009-06-30T10:47:04.857 に答える
83

array.sortは、デフォルトで辞書式ソートを実行します。数値ソートの場合は、独自の関数を提供します。簡単な例を次に示します。

function compareNumbers(a, b)
{
    return a - b;
}

numArray.sort(compareNumbers);

また、並べ替えは「インプレース」で機能するため、割り当ての必要はありません。

于 2009-06-30T10:47:55.590 に答える
59

この回答は既存の回答の一部と同等ですが、ECMAScript 6アロー関数は、読みやすさを犠牲にすることなくインライン並べ替え関数を定義できる、はるかにコンパクトな構文を提供します。

numArray = numArray.sort((a, b) => a - b);

現在、ほとんどのブラウザでサポートされています。

于 2016-02-03T20:07:51.480 に答える
17

私はaksに同意しますが、使用する代わりに

return a - b;

使用する必要があります

return a > b ? 1 : a < b ? -1 : 0;
于 2014-11-18T19:41:00.027 に答える
12

JavaScriptでは、sort()メソッドのデフォルトの動作は、配列内の値をアルファベット順にソートすることです。

数値で並べ替えるには、数値の並べ替え関数を定義する必要があります(これは非常に簡単です)。

...
function sortNumber(a, b)
{
  return a - b;
}

numArray = numArray.sort(sortNumber);
于 2009-06-30T10:48:26.757 に答える
9

上昇

arr.sort((a, b) => a - b);

降順

arr.sort((a, b) => b - a);

楽しみのために:

降順 = 昇順 + 逆

arr.sort((a, b) => a - b).reverse();
于 2021-08-30T06:57:16.490 に答える
9

Array.prototype.sort() は配列をソートするための go to メソッドですが、注意が必要な問題がいくつかあります。

並べ替え順序は、配列内の値のタイプに関係なく、既定では辞書式であり、数値ではありません。配列がすべて数値であっても、すべての値は文字列に変換され、辞書順で並べ替えられます。

したがって、以下のように sort() および reverse() メソッドをカスタマイズする必要があります。

参照URL

配列内の数値のソート用

numArray.sort(function(a, b)
{
    return a - b;
});

配列内の数字を逆にするため

numArray.sort(function(a, b)
{
    return b - a;
});

参照URL

于 2016-03-02T07:53:10.047 に答える