JavaScript
 Computer >> コンピューター >  >> プログラミング >> JavaScript

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

なお、この実装では小文字のみを想定していますが、大文字・小文字の判定を追加したり、記号や数字をそのまま保持したりするなど、用途に応じて柔軟に拡張することもできます。

  1. JavaScriptにおける継承の基本を具体例で解説

    JavaScriptは、クラスベースではなくプロトタイプベースのオブジェクト指向言語です。そのため、継承はprototype(プロトタイプ)オブジェクトを通じて実現されます。コンストラクタ関数のprototypeプロパティにメソッドやプロパティを追加すると、そのコンストラクタから生成されたすべてのインスタンスが、それらを共有して利用できるようになります。 プロトタイプによる継承の仕組み JavaScriptでは、インスタンスからプロパティやメソッドが参照されるとき、まずオブジェクト自身を検索し、見つからなければプロトタイプチェーンをたどって上位のオブジェクトへと探しに行きます。これにより、各イ

  2. JavaScriptでHTMLのdiv要素内のテキストを一括置換する方法

    Webページ上の複数の要素に対して、特定のテキストをまとめて差し替えたいケースはよくあります。たとえば、見出し(h2タグなど)に入っている文字列を、ページ内のすべてのspan要素に反映させたい場合などが該当します。 このような処理を実現するには、document.querySelectorAll() を使用します。あわせて getElementsByClassName() を組み合わせることで、クラス名を指定して対象のテキストを取得できます。 実装のポイント document.querySelectorAll(.my-main-div-class span) で、親要素(div)の中にあるす