ホームページ >ウェブフロントエンド >jsチュートリアル >ブール比較関数は JavaScript 配列を適切にソートできますか?

ブール比較関数は JavaScript 配列を適切にソートできますか?

Barbara Streisand
Barbara Streisandオリジナル
2024-12-18 00:12:13939ブラウズ

Can a Boolean Comparison Function Properly Sort a JavaScript Array?

JavaScript での並べ替え: 比較関数としてはブール値を返すだけでは十分ではありませんか?

JavaScript で配列を並べ替える従来の方法は次のとおりです。 Array.sort() メソッドを使用すると、カスタム比較を指定できます。 function.

質問:

単純にブール比較関数 (true/false を返す) を使用して配列を並べ替えることはできますか、それとも数値を返す必要がありますか? (例: 1、-1、 0)?

答え:

いいえ、ブール値を返すだけでは JavaScript の比較関数としては十分ではありません。比較関数は、比較される 2 つの要素間の関係を示す数値を返さなければなりません: a が b より大きい場合は

  • 1
  • -1 a が b
  • a が次の場合は 0 b

推論:

ブール値を返すことは、一方の要素が他方の要素より大きいか小さいかを指定するだけですが、要素に対して十分な情報は提供しません。どの要素が最初に来るかを決定するソート アルゴリズム。たとえば、true を返す比較関数は、a が b よりも大きいかどうかを指定しません。

間違った解決策が蔓延する理由:

ブール値を返すという間違った解決策が広まっているのは、場合によっては、特に単純な数値配列を並べ替える場合に機能するためです。ただし、より複雑なデータを並べ替えたり、不安定な並べ替えアルゴリズム (等しい要素の順序を変更する) を使用したりすると、予期しない結果が生じる可能性があります。

正しい比較関数:

配列を正しく並べ替えるには、次の比較関数のいずれかを使用します:

  • 辞書順ソート(比較関数なし): 単純な辞書順ソートの場合は、比較関数を提供しません。項目は文字列化され、それに応じて並べ替えられます。
  • 汎用比較関数:

    function(a, b) {
      if (a > b) return 1;
      if (a < b) return -1;
      /* else */ return 0;
    }
  • 比較関数数値:

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

注:

    比較関数が
  • 一貫していることを常に確認してください 予期しない並べ替えを避けるために推移性のルールに従います
  • 複合タイプを並べ替えるには、比較関数を変更して目的のプロパティを比較するか、並べ替え可能な値を返すカスタム関数を使用します。

以上がブール比較関数は JavaScript 配列を適切にソートできますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。