配列プロトタイプで使用可能な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);

Arrayコンストラクターメソッドで使用可能な静的fillメソッドを使用します。 次に、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()メソッドは配列をソートします。

  1. 昇順
  2. 文字列にキャストされたアイテムで

これを行うには、sortメソッドがすべての配列要素でString()キャストメソッドを呼び出し、同等の文字列を比較して正しい順序を決定します。

アイテムが文字列として比較され、アイテムが数字ではなく文字列であるかのようにソートされるという事実を除けば、それは簡単だったでしょう。 つまり、ほとんどの場合、コールバックメソッドなしでsortメソッドを使用しても、sortは期待どおりにソートされないため、うまく機能しません。 代わりに、コールバック関数を使用して、その方法を明示的に指示する必要があります。

コールバック関数または技術的には比較関数は2つの引数(慣例によりaおよびbと呼ばれます)を受け取り、1[を返す必要がありますX170X]最初の引数が2番目の引数に先行する必要がある場合、 -1 (2番目の引数が最初の引数に先行する必要がある場合)および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);

そして、はい、それは機能します…昇順で。

降順

降順で並べ替える必要がありますか? 次のように、比較関数の return1return-1と交換するだけです。

function sortEggsInNest(a, b) {
  if (a > b) {
    return -1;;
  } else if (b > a) {
    return 1;;
  } else {
    return 0;
  }
}

または、三項演算子を使用した短いバージョン:

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は、shiftsplicereverseなどとともに、多くの配列ミューテイタメソッドの1つです。 すべてのメソッドの詳細については、 JavaScriptで配列メソッドを使用する方法:ミューテイターメソッドを参照してください。