JavaScriptで配列の値に基づいて文字列の文字をシフトする方法
本記事では、小文字の英字のみで構成された文字列に対して、配列内の数値に従って各文字をシフトするJavaScript関数の実装方法を解説します。
問題の概要
まず、「1単位のシフト」を次のように定義します。ある文字を、アルファベット順でその直後の文字に置き換えること。これには循環(ラップアラウント)も含まれます。つまり、「z」の次の文字は「a」となります。
今回作成する関数は、以下の2つの引数を受け取ります。
- str: 小文字英字のみを含む文字列(第1引数)
- arr: strと同じ長さを持つ数値の配列(第2引数)
関数は、元の文字列の各文字を、配列arr内の同じ位置にある数値の分だけシフトした新しい文字列を生成して返します。
具体例
入力となる文字列と配列が以下の場合:
const str = 'dab'; const arr = [1, 4, 6];
期待される出力は次のとおりです。
const output = 'eeh';
これは、「d」が1単位シフトされて「e」に、「a」が4単位シフトされて「e」に、「b」が6単位シフトされて「h」になるためです。
実装例
コードは以下のとおりです。
const str = 'dab';
const arr = [1, 4, 6];
const shiftString = (str = '', arr = []) => {
const alphabet = 'abcdefghijklmnopqrstuvwxyz';
let res = '';
for (let i = 0; i < arr.length; i++) {
const el = str[i];
const shift = arr[i];
const index = alphabet.indexOf(el);
const newIndex = (index + shift) % 26;
res += alphabet[newIndex];
}
return res;
};
console.log(shiftString(str, arr));
コードのポイント
- 基準となるアルファベット文字列alphabetを用意し、
indexOf()で各文字の位置(0〜25)を求めます。 - 現在のインデックスに対応するシフト量を加算し、26で剰余を取る(% 26)ことで「z」から「a」への循環を自然に実現しています。この方法なら、大きなシフト量でも正しく処理できます。
- 計算した新しいインデックスの文字を順番に連結し、結果の文字列を組み立てます。
出力
コンソールへの出力結果は次のとおりです。
eeh
このように、剰余演算を活用することで、シーザー暗号のような文字シフト処理を簡潔かつ堅牢に実装できます。応用すれば、暗号化・復号処理やテキスト変換ツールなどにも展開できるでしょう。
-
【JavaScript】文字列から頭字語(アクロニム)を生成して返す方法
文字列を唯一の引数として受け取るJavaScript関数を作成する必要があります。 この関数は、引数として渡された文字列フレーズをもとに頭字語(アクロニム)を構築し、その結果を返します。 頭字語を構築する際のルールは、大文字で始まる単語のみを対象とすることです。小文字で始まる単語は頭字語に含めません。 例 たとえば、入力文字列が以下の場合を考えてみましょう。 const str = Polar Satellite Launch Vehicle; このとき、期待される出力は次のとおりです。 const output = PSLV; サンプルコード const str = Polar Sate
-
JavaScriptで文字列内の2つの単語の先頭文字を入れ替える方法
問題 今回は、スペースで区切られた2つの単語からなる文字列を引数として受け取るJavaScript関数を作成します。 この関数の目的は、それぞれの単語の先頭文字(1文字目)を互いに入れ替えた新しい文字列を構築し、それを返すことです。 たとえば「hello world」という入力に対しては、先頭の「h」と「w」を交換して「wello horld」を出力する必要があります。 コード例 以下が実際のコードです。 const str = hello world; const interchangeChars = (str = ) => { const [first, second]