JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

JavaScriptで交互シャッフル配列を作成する方法【サンプルコード付き】

交互シャッフルとは?

JavaScriptにおける「交互シャッフル」とは、数値の配列を並べ替えて、最大値の直後に最小値2番目に大きい値の直後に2番目に小さい値……というように、大きい値と小さい値を交互に配置する手法のことです。

たとえば、次の入力配列があったとします。

const arr = [11, 7, 9, 3, 5, 1, 13];

この場合、期待される出力は以下のとおりです。

const output = [13, 1, 11, 3, 9, 5, 7];

実装コード

以下が交互シャッフルを実現するコードです。slice() で元の配列のコピーを作成してから処理するため、入力元の配列は変更されません。

const arr = [11, 7, 9, 3, 5, 1, 13];

// 交互シャッフルを行う関数
const alternateShuffle = (arr) => {
  // 元の配列を壊さないようコピーし、昇順にソート
  const sorted = arr.slice().sort((a, b) => a - b);

  // 末尾の最大値を取り出し、偶数番目の位置に挿入
  for (let start = 0; start < sorted.length; start += 2) {
    sorted.splice(start, 0, sorted.pop());
  }
  return sorted;
};

console.log(alternateShuffle(arr));

出力結果

コンソールには次のように出力されます。

[
    13, 1, 11, 3,
    9, 5,  7
]

仕組みのポイント

  1. slice() + sort():元の配列をコピーして昇順に並べ替えます。
  2. pop():ソート済み配列の末尾から、その時点で最大の値を取り出します。
  3. splice():取り出した値を偶数番目のインデックス(0, 2, 4…)に挿入します。

これらの操作を繰り返すことで、「最大 → 最小 → 2番目に大きい → 2番目に小さい……」という交互の並び順が完成します。元の配列を保持しつつ新しい配列を返す設計のため、副作用がなく再利用しやすいのも大きなメリットです。

  1. 【初心者向け】JavaScriptのreverse()メソッドで配列を逆順にする方法

    JavaScriptのreverse()メソッドは、配列の要素を元の順序と逆順に入れ替えるための便利な関数です。このメソッドを呼び出すと、配列の最初の要素が最後に、最後の要素が最初に移動し、配列全体が反転されます。reverse()メソッドの基本reverse()は配列そのものを変更する「破壊的メソッド」である点に注意してください。つまり、元の配列の順序が直接書き換えられます。元の配列を保持したい場合は、あらかじめslice()やスプレッド構文([...arr])などでコピーを作成してからreverse()を使用するのがおすすめです。サンプルコード以下は、ボタンをクリックすると配列の要素が逆順

  2. JavaScriptにおける配列の分割代入(Destructuring)の基本と使い方

    分割代入(Destructuring)とは、配列から値を取り出して個別の変数に展開するための構文です。ES2015(ES6)で導入されたこの機能を使うと、配列の各要素を簡潔かつ読みやすく変数に割り当てることができます。 配列の分割代入のサンプルコード 以下は、JavaScriptで配列の分割代入を行うコード例です。 <!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8" /> <meta name="viewport&quo