JavaScript での配列ソート用のカスタム比較関数: ブール値の戻り値だけでは不十分な場合
カスタム比較関数は、次の目的でよく使用されます。配列のデフォルトの辞書編集順序を変更する場合、よくある誤解は、単純に true または false を返すというものです。関数からで十分です。ただし、このアプローチは間違っており、信頼性の低い並べ替え結果が生じる可能性があります。
ブール比較関数の問題
比較関数からブールを返す場合の問題は次のとおりです。 JavaScript 仕様で定義されている「一貫した比較関数」の要件に違反する可能性があるということです。一貫性のある比較関数は、比較される要素の相対的な順序を示す数値 (具体的には、-1、0、または 1) を返す必要があります。
数値の代わりにブール値を返すと、予期しない動作が発生する可能性があります: 推移性違反:- 関数 function(a, b) { return a > b; b が a より大きい場合、 false を返します。これは、 b を a より前にソートする必要があることを意味します。ただし、この関数は、a と b が等しい場合にも false を返します。これは、a が b に等しく、b が c より小さい場合、a は c より小さくなければならないという推移的性質に矛盾します。
未定義の並べ替え順序:
比較関数から false を返すと、並べ替え順序が未定義になる可能性があります。たとえば、sort [1, 1, 0, 2].sort(function(a, b) { return a > b; }) の結果は [0, 1, 1, 2] または [1, 1, 0, 2] ソート アルゴリズムの実装に応じて異なります。
正しい比較関数
一貫性と信頼性の高い並べ替えを保証するには、比較される要素の相対的な順序を表す数値を返す比較関数を定義することが重要です。 汎用比較関数:- 辞書編集的な比較の場合、汎用関数は function(a, b) { if (a < b) -1 を返します。 (a > b) の場合は 1 を返します。それ以外の場合は 0 を返します。 }.
数値比較:- 数値を比較するには、より単純な関数を使用できます。 function(a, b) { return a - b; }.
特定のプロパティによる比較:
オブジェクトまたは配列を特定のプロパティで並べ替えるには、関数でそのプロパティにアクセスし、その値を比較できます。 function(a, b) { return a. name.localeCompare(b.name);
<🎜>
結論
JavaScript の比較関数にブール値の戻り値を使用したくなるかもしれませんが、一貫した比較関数のために指定された要件に従うことが重要です。これにより、並べ替えアルゴリズムが要素を適切に比較し、信頼性の高い予測可能な結果を生成できるようになります。
以上がJavaScript の配列ソート比較関数でブール値を返すのが間違っているのはなぜですか: 正しい使用法へのガイドの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。