JavaScript での並べ替え: 比較関数としてはブール値を返すだけでは十分ではありませんか?
JavaScript で配列を並べ替える従来の方法は次のとおりです。 Array.sort() メソッドを使用すると、カスタム比較を指定できます。 function.
質問:
単純にブール比較関数 (true/false を返す) を使用して配列を並べ替えることはできますか、それとも数値を返す必要がありますか? (例: 1、-1、 0)?
答え:
いいえ、ブール値を返すだけでは JavaScript の比較関数としては十分ではありません。比較関数は、比較される 2 つの要素間の関係を示す数値を返さなければなりません: a が 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 サイトの他の関連記事を参照してください。