JavaScriptで配列の先頭と末尾から特定位置の要素を入れ替える方法
問題の概要
数値の配列と整数 n(n は配列の長さ以下である必要があります)を受け取り、先頭から k 番目の要素を末尾から k 番目の要素と入れ替える JavaScript 関数を作成します。
例えば、次のような配列があるとします。
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
k = 4 を指定した場合、先頭から4番目の要素「3」と、末尾から4番目の要素「6」が入れ替わり、結果は [0, 1, 2, 6, 4, 5, 3, 7, 8, 9] になります。
実装コード
以下がそのコード例です。
const arr = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
const swapNth = (arr, k) => {
const { length: l } = arr;
let temp;
const ind = k - 1;
temp = arr[ind];
arr[ind] = arr[l - k];
arr[l - k] = temp;
};
swapNth(arr, 4);
console.log(arr);
swapNth(arr, 8);
console.log(arr);
コードの解説
arr.lengthを分割代入によって変数lに格納しています。- 先頭から k 番目の要素のインデックスは
k - 1(変数ind)です。配列のインデックスは0から始まるためです。 - 末尾から k 番目の要素のインデックスは
l - kで求められます。 - 一時変数
tempを使って、2つの要素の値を安全に交換しています。
なお、ES2015 以降の環境では、一時変数を使わずに分割代入で要素を交換することもできます。
const swapNth = (arr, k) => {
const l = arr.length;
[arr[k - 1], arr[l - k]] = [arr[l - k], arr[k - 1]];
};出力結果
コンソールには次のように出力されます。
[
0, 1, 2, 6, 4,
5, 3, 7, 8, 9
]
[
0, 1, 7, 6, 4,
5, 3, 2, 8, 9
]
最初の呼び出し(k = 4)では、先頭から4番目の「3」と末尾から4番目の「6」が入れ替わっています。続けて k = 8 で呼び出すと、先頭から8番目の「2」と末尾から8番目の「7」が入れ替わることが確認できます。
このように、インデックス計算と一時変数(または分割代入)を組み合わせるだけで、配列内の任意の2要素を簡単に入れ替えることができます。
-
【JavaScript】配列から指定した数値を削除し、残りの要素を左にシフトする方法
今回は、数値の配列を第1引数に、削除したい数値を第2引数に受け取るJavaScript関数を作成します。この関数は、第2引数で指定された数値が配列内に存在する場合、その要素を取り除き、それより右側にあるすべての要素を1つずつ左へシフトする必要があります。唯一の条件は、slice() や splice() をはじめとする配列操作系の組み込みメソッドを使用してはいけないという点です。また、同じ数値が配列内に複数存在する場合は、最初に出現したものだけを削除します。処理内容の例たとえば、入力配列が次のような場合を考えてみましょう。const arr = [3, 5, 6, 3, 7, 8, 8, 6]
-
JavaScriptで文字列の配列からコメントを削除する方法
この記事では、JavaScriptを使って文字列の配列からコメント部分を削除する方法について解説します。 問題 文字列の配列 arr を第一引数として、特殊文字の配列 starters を第二引数として受け取るJavaScript関数を作成する必要があります。 starters 配列には、コメントの開始となり得る文字が格納されています。作成する関数は、配列 arr を走査し、各文字列に含まれるコメントをすべて削除した結果を返すものとします。 例えば、関数への入力が次のような場合を考えてみましょう。 const arr = [ red, green !blue