ホームページ >ウェブフロントエンド >jsチュートリアル >JavaScript の Array.sort 比較関数にブール値の戻り値が十分ではないのはなぜですか?

JavaScript の Array.sort 比較関数にブール値の戻り値が十分ではないのはなぜですか?

Barbara Streisand
Barbara Streisandオリジナル
2025-01-04 06:02:41202ブラウズ

Why Isn't a Boolean Return Value Enough for JavaScript's Array.sort Comparison Function?

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

JavaScript の Array.sort メソッドでは、要素を並べ替えるためのカスタム比較関数が可能です。また、よくある質問ソートにはブール値を返す単純な比較関数で十分でしょうか?答えは明確にノーです。

ブール比較が不十分な理由

JavaScript の比較関数は次の規則に従う必要があります:

  • 数値を返す: より大きいa を b の後にソートする必要がある場合は 0、等しい場合は 0、a を前にソートする必要がある場合は 0 未満b.
  • 一貫性を保つ: If Compare(a, b) > 0、その後、compare(b, a)

ただし、ブール値を返しても一貫性は保証されません。たとえば、compare(a, b) が false (または同等の 0) を返す場合、a が b に等しいか、小さい ことを意味します。これは、並べ替えアルゴリズムに必要な推移性プロパティに違反します。

反例

次の比較関数を考えてみましょう:

function compare(a, b) {
  return a > b;
}

a が b より大きい場合はブール値を返します。

この関数をソートに使用すると、 have:

[0, 1, 0].sort(compare); // [0, 1, 0] or [1, 0, 0] (varies between implementations)
[1, 1, 0, 2].sort(compare); // [0, 1, 2, 1] or [1, 1, 0, 2] (varies between implementations)

比較関数が推移性を強制していないため、結果に一貫性がありません。

正しい比較関数

一貫した並べ替えを保証するには、正しい数値:

  • 辞書式並べ替え: 単純な文字列または数値の並べ替えには、カスタム関数を使用せずに sort() を使用します。
  • 数値並べ替え: (a, b) => を使用します。 a - b は、数値を昇順に並べ替えます。
  • カスタム ソート: 並べ替える特定のプロパティを考慮して、上記のルールに従う比較関数を実装します。

これらのガイドラインに従うことで、JavaScript コードで信頼性が高く予測可能な並べ替え動作を保証できます。

以上がJavaScript の Array.sort 比較関数にブール値の戻り値が十分ではないのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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