【JavaScript】配列が回文(パリンドローム)かどうかを判定する方法
JavaScriptでは、リテラル値を含む配列を受け取り、その要素が前から読んでも後ろから読んでも同じであるかどうかを判定する関数を書くことができます。このような配列は「回文配列(パリンドローム配列)」と呼ばれます。
回文配列の具体例は以下の通りです。
const arr1 = ['a', 'b', 'c', 'b', 'a']; const arr2 = [4, 7, 7, 4]; const arr3 = [7, 7, 7, 7, 7, 7];
いずれの配列も、先頭から順に読んだ場合と末尾から逆に読んだ場合で、要素の並びが完全に一致しています。
回文判定の実装例
以下のコードは、配列の中央位置までループし、対称的な位置にある要素同士を比較することで回文かどうかを判定する実装例です。
const arr = [1, 5, 7, 4, 15, 4, 7, 5, 1];
const isPalindrome = arr => {
const { length: l } = arr;
const mid = Math.floor(l / 2);
for (let i = 0; i <= mid; i++) {
if (arr[i] !== arr[l - i - 1]) {
return false;
}
}
return true;
};
console.log(isPalindrome(arr));コードのポイント
Math.floor(l / 2)で配列の中央インデックスを求めます。- ループ内で
arr[i]とarr[l - i - 1]を比較し、1つでも一致しないペアがあれば即座にfalseを返します。 - すべての比較を通過すれば、その配列は回文であるため
trueを返します。
実行結果
上記のコードをコンソールで実行すると、次の出力が得られます。
true
この例の配列 [1, 5, 7, 4, 15, 4, 7, 5, 1] は左右対称の並びになっているため、true(回文である)と判定されました。
-
JavaScriptの配列で使えるスプレッド演算子(...)の使い方
スプレッド構文(...)を使うと、配列などのイテラブルなオブジェクトを、0個以上の引数が期待される場所で展開することができます。これにより、配列の要素をまとめて関数の引数として渡すことが可能になります。スプレッド演算子の基本例えば、5つの引数を受け取る関数に対して5つの要素を持つ配列を渡したい場合、従来の書き方では各要素を個別に指定する必要がありました。しかし、スプレッド演算子を使えば「add(...arr)」のように記述するだけで、配列の各要素が順番に引数として展開されて渡されます。スプレッド演算子は、配列の結合やコピーなど、さまざまな場面でも活用できる便利な構文です。以下は、JavaScr
-
JavaScriptで配列の要素が2乗の関係かどうかをチェックする方法
問題 2つの数値の配列 arr1 と arr2 をそれぞれ第1・第2引数として受け取るJavaScript関数を作成することを考えます。 この関数は、arr2 のすべての要素が、出現順序に関係なく arr1 のいずれかの要素の2乗と一致する場合にのみ true を返し、それ以外の場合は false を返す必要があります。 たとえば、関数への入力が次のようであった場合を考えてみましょう。 入力 const arr1 = [4, 1, 8, 5, 9]; const arr2 = [81, 1, 25, 16, 64]; 出力 const output = true; この場合、81 = 9²、