JavaScriptで偶数・奇数インデックスのペアを配列内で入れ替える方法
本記事では、リテラルからなる配列を唯一の引数として受け取り、偶数インデックス同士および奇数インデックス同士の隣接ペアを入れ替えるJavaScript関数の実装方法を解説します。
要件
求められる処理は次のとおりです。
- 連続する偶数インデックス同士の要素を入れ替える
- 連続する奇数インデックス同士の要素を入れ替える
- 入れ替えは新しい配列を作らず、元の配列に対してin-place(その場で)行う
具体例
たとえば、入力配列が次の場合を考えてみましょう。
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8];
このとき、期待される出力は次のようになります。
const output = [2, 3, 0, 1, 6, 7, 4, 5, 8];
これは、インデックス0と2の値(0と2)、インデックス1と3の値(1と3)、インデックス4と6の値(4と6)、インデックス5と7の値(5と7)がそれぞれ入れ替わり、末尾の要素である8は対応するペアがないためそのまま残るためです。
実装コード
以下が実際のコードです。
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8];
const swapPairs = (arr = []) => {
// 指定した2つのインデックスの要素を入れ替えるヘルパー関数
const swap = (array, ind1, ind2) => {
const temp = array[ind1];
array[ind1] = array[ind2];
array[ind2] = temp;
};
let i = 0;
// 4つずつ進みながら偶数・奇数インデックスのペアを入れ替える
for (; i + 3 < arr.length; i += 4) {
swap(arr, i, i + 2); // 偶数インデックス同士
swap(arr, i + 1, i + 3); // 奇数インデックス同士
}
// ループ後に要素がまだ2つ以上残っている場合、
// 最後の偶数インデックスペアだけを入れ替える
if (i + 2 < arr.length) {
swap(arr, i, i + 2);
}
};
swapPairs(arr);
console.log(arr);コードのポイント
- swap関数:一時変数
tempを使って、指定された2つのインデックスの要素を安全に入れ替えます。 - メインループ:カウンタを4ずつ進めながら、
i番目とi + 2番目(偶数インデックス)、i + 1番目とi + 3番目(奇数インデックス)の要素をまとめて入れ替えます。 - 残り要素の処理:配列の長さが4の倍数でない場合でも、ループ終了後に余った偶数インデックスのペアだけを入れ替えることで、どの長さの配列にも正しく対応できます。
出力結果
コンソールには次のように表示されます。
[ 2, 3, 0, 1, 6, 7, 4, 5, 8 ]
このように、追加のメモリを使わずに元の配列を直接書き換える形で、偶数・奇数インデックスのペア入れ替えを実現できています。
-
JavaScriptで数値が偶数か奇数かを判定する方法
JavaScriptで数値が偶数か奇数かを判定するには、剰余演算子(%)を使用します。剰余演算子は、ある数を別の数で割ったときの「あまり」を返す演算子です。たとえば、数値を2で割った余りが0であればその数は偶数、1であれば奇数であると判断できます。この性質を利用することで、条件分岐(if文)と組み合わせて簡単に判定処理を実装できます。基本的な考え方num % 2 == 0 → 余りが0なので偶数num % 2 == 1 → 余りが1なので奇数サンプルコード以下のコードは、変数に代入した数値が偶数か奇数かを判定して画面に表示する例です。実際にブラウザで実行してみましょう。<!DOCTYPE
-
CSSのnth-childでHTML要素に奇数・偶数のスタイルを追加する方法
Webページを作っていると、リストやカードなど複数の要素に対して「奇数番目」「偶数番目」で異なるスタイルを適用したい場面がよくあります。そのようなときは、CSSの擬似クラスである nth-child(odd) と nth-child(even) を使えば、要素に一つずつクラスを手動で追加しなくても、簡単にスタイルを切り替えることができます。CSSのnth-childを使った基本例以下のコードでは、subjectName クラスを持つ要素に対して、奇数番目の要素は青色、偶数番目の要素は紫色を自動的に適用しています。サンプルコード<!DOCTYPE html> <html lan