The sort
配列プロトタイプで使用可能なメソッドを使用すると、配列の要素を並べ替えて、並べ替えの実行方法を制御できます。 この投稿の目的は、その理由、理由、方法を説明することです。 sort
このメソッドは、数値の配列を並べ替えるときに機能します。
TL; DR — 以下を使用して、数値の配列を昇順で並べ替えます。
myArray.sort((a, b) => a - b);
JavaScriptのArraysは、データ項目のコレクションで構成されるデータ構造です。 Javascriptは型付き言語ではないため、Javascript配列には、文字列、数値、未定義などのさまざまな種類の要素を含めることができます。 ただし、ほとんどの場合、配列内のすべてのアイテムを同じタイプにすることをお勧めします。
アレイで実行できる多くの操作の1つは、sortingです。 成績のコレクションから最高の生徒を知る必要があるかどうか、ウォールストリートの大勝者、最近消費しているデータの量など、すべてに並べ替えによるコレクションの整理が含まれます。
以下のコード例では。 巣の中の卵のコレクションを取得し、昇順と降順の両方で並べ替えます。 準備? やってみましょう!
配列を埋める
宣言して初期化します nest
配列し、それを事前に入力します null
値-今のところ:
let eggsInNest = new Array(10).fill(null);
で利用可能な静的fillメソッドを使用します Array
コンストラクターメソッド。 次に、10個の要素をそれぞれ1〜200の範囲のランダムな値で埋めましょう。
eggsInNest = eggsInNest.map(() => (Math.floor(Math.random() * 200) + 1));
並べ替え
次に、を呼び出すだけで並べ替えることができます sort
引数なしの配列のメソッド:
eggsInNest.sort();
// e.g.: [109, 136, 156, 188, 19, 190, 2, 34, 55, 90]
ご覧のとおり、わずかな問題があり、予想どおりに並べ替えがうまくいきませんでした。 それを修正する理由と方法を学ぶために読んでください。
デフォルトでは、 sort()
メソッドは配列をソートします:
- 昇順
- 文字列にキャストされたアイテムで
これを行うには、 sort
メソッドは String()
すべての配列要素にメソッドをキャストしてから、同等の文字列を比較して正しい順序を決定します。
アイテムが文字列として比較され、アイテムが数字ではなく文字列であるかのようにソートされるという事実を除けば、それは簡単だったでしょう。 要するに、ほとんどの場合、 sort
コールバックメソッドのないメソッドは、完全には機能しません。 sort
私たちが期待する方法でソートしません。 代わりに、コールバック関数を使用して、その方法を明示的に指示する必要があります。
コールバック関数、または技術的には比較関数は2つの引数を受け取ります( a
と b
慣例により)、最初の引数が2番目の引数の前にある場合は 1 を返し、2番目の引数が最初の引数の前にある場合は -1 を返し、等しい場合は0を返します。 。 ふぅ! 😓
を作成しましょう sortEggsInNest
比較機能:
function sortEggsInNest(a, b) {
if (a > b) {
return 1;
} else if (b > a) {
return -1;
} else {
return 0;
}
}
ホットショットになりたい場合は😎 sortEggsInNest
次のような三項演算子との比較関数:
function sortEggsInNest(a, b) {
return a > b ? 1 : b > a ? -1 : 0;
}
次に、 sort
もう一度方法がありますが、今回は sortEggsInNest
比較機能:
eggsInNest.sort(sortEggsInNest);
そして、はい、それは機能します…昇順で。
降順
降順で並べ替える必要がありますか? 次のように、比較関数の return1をreturn-1と交換するだけです。
function sortEggsInNest(a, b) {
if (a > b) {
return -1;;
} else if (b > a) {
return 1;;
} else {
return 0;
}
}
または、3値演算子を使用した短いバージョン:
function sortEggsInNest(a, b) {
return a > b ? -1 : b > a ? 1 : 0;
}
数字を使ったより短い方法
最後に、比較関数を作成するさらに短い方法があります。 ここ:
eggsInNest.sort((a, b) => a - b);
比較関数は1、-1、または0 のみを返すため、これは問題ありません。 2つの中間値を引くと、まさにそれが得られます。 ただし、注意してください。これは、数値型またはオブジェクトでのみ使用できます。 valueOf()
メソッドは数値(Dateオブジェクトなど)を返します。
参考文献
sort
は、多くの配列ミューテイタメソッドの1つです。 shift
, splice
, reverse
その他。 すべてのメソッドの詳細については、 JavaScriptで配列メソッドを使用する方法:ミューテイターメソッドを参照してください。