JavaScriptで文字列内の各アルファベットをn個先の文字に置き換える方法
問題の概要
アルファベットで構成された文字列と整数nを受け取り、各文字を「n個先」のアルファベットに置き換えた新しい文字列を返すJavaScript関数を作成する必要があります。この処理は、古典的な暗号化手法であるシーザー暗号(Caesar cipher)と同じ考え方に基づいています。
例えば、入力が以下の場合を考えてみましょう。
const str = 'abcd';
const n = 2;
この場合、期待される出力は次の通りです。
const output = 'cdef';
'a'は2つ先の'c'に、'b'は'd'にというように、文字列内のすべての文字がn個先のアルファベットへとシフトされます。
実装コード
const str = 'abcd';
const n = 2;
const replaceNth = (str, n) => {
const alphabet = 'abcdefghijklmnopqrstuvwxyz';
let i, pos, res = '';
for(i = 0; i < str.length; i++){
pos = alphabet.indexOf(str[i]);
res += alphabet[(pos + n) % alphabet.length];
};
return res;
};
console.log(replaceNth(str, n));
コードの解説
このコードの仕組みを順番に見ていきましょう。
- まず、基準となるアルファベット順の文字列
alphabetを用意します。 forループで入力文字列を1文字ずつ調べ、indexOf()メソッドを使ってその文字の位置(インデックス)を取得します。(pos + n) % alphabet.lengthという剰余演算を行うことで、末尾の'z'を超えても先頭の'a'に折り返す循環処理を実現しています。- 変換した文字を順次連結し、最終的な結果文字列を返します。
出力
コンソールには以下のように出力されます。
cdef
なお、この実装では小文字のみを想定していますが、大文字・小文字の判定を追加したり、記号や数字をそのまま保持したりするなど、用途に応じて柔軟に拡張することもできます。
-
JavaScriptにおける継承の基本を具体例で解説
JavaScriptは、クラスベースではなくプロトタイプベースのオブジェクト指向言語です。そのため、継承はprototype(プロトタイプ)オブジェクトを通じて実現されます。コンストラクタ関数のprototypeプロパティにメソッドやプロパティを追加すると、そのコンストラクタから生成されたすべてのインスタンスが、それらを共有して利用できるようになります。 プロトタイプによる継承の仕組み JavaScriptでは、インスタンスからプロパティやメソッドが参照されるとき、まずオブジェクト自身を検索し、見つからなければプロトタイプチェーンをたどって上位のオブジェクトへと探しに行きます。これにより、各イ
-
JavaScriptでHTMLのdiv要素内のテキストを一括置換する方法
Webページ上の複数の要素に対して、特定のテキストをまとめて差し替えたいケースはよくあります。たとえば、見出し(h2タグなど)に入っている文字列を、ページ内のすべてのspan要素に反映させたい場合などが該当します。 このような処理を実現するには、document.querySelectorAll() を使用します。あわせて getElementsByClassName() を組み合わせることで、クラス名を指定して対象のテキストを取得できます。 実装のポイント document.querySelectorAll(.my-main-div-class span) で、親要素(div)の中にあるす