Array.prototype.sort
私は最近、カスタム メソッドを使用して任意の時点で 2 つの値を比較し、それらを交換するかそのままにするかを決定する方法を誰かに説明したいと思いました。前の比較の結果を確認できるように、各比較中に配列をログに記録することにしました。配列をログに記録したとき、特定の時点での配列の状態にかなり奇妙な点があることに気付きました。
以下を仮定します。
var num = [ 2, 1, 8, 5, 3 ];
num.sort( comparator );
function comparator ( a, b ) {
console.log( num ); // Current state of num
return a - b; // Order values numerically
}
これは出力です:
[ 2, 1, 8, 5, 3 ] // Comparing 2 and 1
[ 1, 2, 8, 5, 3 ] // Comparing 2 and 8
[ 1, 2, 8, 5, 3 ] // Comparing 8 and 5
[ 1, 2, 8, 8, 3 ] // Comparing 2 and 5
[ 1, 2, 5, 8, 3 ] // Comparing 8 and 3
[ 1, 2, 5, 8, 8 ] // Comparing 5 and 3
[ 1, 2, 5, 5, 8 ] // Comparing 2 and 3
配列は適切にソートされています ( [ 1, 2, 3, 5, 8 ]
) が、コレクション自体のいくつかのパスにまだ頭を悩ませています。
反復 4 で 8 が 2 回出現し、一時的に 5 が置き換えられるのはどうしてですか。そして再び、8 が 2 回出現し、2 回の反復後に 3 が一時的に置き換えられます。最後に、5 が 2 回表示され、最後の反復で 3 が一時的に置き換えられます。
上記のコードは Chrome で実行されたことに注意してください。