JavaScriptでのソートとタイブレークの使用方法


以下に、ソート関数を使用してタイブレークを行うためのいくつかの方法を示します。

方法1: カスタム比較関数を使用する

const array = [5, 3, 8, 2, 1, 5];
array.sort((a, b) => {
  if (a === b) {
    // タイブレーク: aとbが等しい場合の処理
    // この例では、元の順序を維持するために0を返します
    return 0;
  } else {
    // aがbより小さい場合は負の値、大きい場合は正の値を返します
    return a - b;
  }
});
console.log(array); // 出力: [1, 2, 3, 5, 5, 8]

方法2: マルチプロパティのソート

const array = [
  { name: 'John', score: 80 },
  { name: 'Alice', score: 90 },
  { name: 'Bob', score: 80 }
];
array.sort((a, b) => {
  if (a.score === b.score) {
    // タイブレーク: scoreが等しい場合はnameで比較
    return a.name.localeCompare(b.name);
  } else {
    // scoreが小さい場合は負の値、大きい場合は正の値を返す
    return a.score - b.score;
  }
});
console.log(array);
// 出力: [{ name: 'Bob', score: 80 }, { name: 'John', score: 80 }, { name: 'Alice', score: 90 }]

上記の例では、カスタム比較関数を使用してタイブレークを行っています。比較関数は引数として2つの要素(aとb)を受け取り、aがbより小さい場合は負の値、大きい場合は正の値を返す必要があります。タイブレークのために0を返すこともできます。

また、マルチプロパティのソートでは、複数のプロパティを使用してソートを行います。最初に1つ目のプロパティで比較し、等しい場合に2つ目のプロパティでタイブレークを行います。

このように、JavaScriptのソート関数を適切にカスタマイズすることで、タイブレークを行ったソートを実現することができます。以上のコード例を参考にして、自身のケースに合わせたソートを実装してみてください。