JavaScriptで文字列の各文字を次のアルファベットに置き換える方法
文字列を受け取り、文字列内のすべての英字を、それぞれ「次のアルファベット」に置き換えた新しい文字列を返すJavaScript関数を作成してみましょう。
要件の確認
たとえば、次のような文字列が入力された場合:
const str = 'how are you';
期待される出力
結果は以下のようになります:
const output = 'ipx bsf zpv';
ご覧のとおり、すべての英字が1文字ずつ後ろにシフトされています(h→i、o→p、w→x など)。一方、スペースなど英字以外の文字はそのまま維持されます。
実装のポイント
- charCodeAt() を使って各文字の文字コード(Unicode値)を取得する
- 大文字の A〜Z は 65〜90、小文字の a〜z は 97〜122 というコード範囲で英字かどうかを判定する
- Z(90) および z(122) の場合は、A(65)・a(97) へ折り返す(ラップアラウンド処理)
- 英字以外の文字は変換せず、そのまま結果に連結する
サンプルコード
実際のコードは次のとおりです:
const str = 'how are you';
// 英字かどうかを判定するヘルパー関数
const isAlpha = code => (code >= 65 && code <= 90) || (code >= 97 && code <= 122);
// アルファベットの末尾(Z または z)かどうかを判定
const isLast = code => code === 90 || code === 122;
const nextLetterString = str => {
const strArr = str.split('');
return strArr.reduce((acc, val) => {
const code = val.charCodeAt(0);
// 英字以外はそのまま追加
if (!isAlpha(code)) {
return acc + val;
};
// Z / z の場合は A / a に戻る
if (isLast(code)) {
return acc + String.fromCharCode(code - 25);
};
// それ以外は次の文字へシフト
return acc + String.fromCharCode(code + 1);
}, '');
};
console.log(nextLetterString(str));
実行結果
コンソールには次のように出力されます:
ipx bsf zpv
コードの解説
まず split('') で文字列を1文字ずつの配列に分解し、reduce() を使って各文字を順番に処理しています。String.fromCharCode() は数値のコードポイントを対応する文字に変換するメソッドで、コードに「+1」することで次のアルファベットを取得できます。この仕組みを応用すれば、シーザー暗号のような文字シフト処理も簡単に実装できるので、ぜひ参考にしてください。
-
JavaScriptのgetPrototypeOf()メソッドとは?具体例でわかる使い方とプロトタイプの確認方法
JavaScriptのgetPrototypeOf()メソッドとは? getPrototypeOf()メソッドは、ユーザーが作成したオブジェクトのプロトタイプ(内部スロット [[Prototype]])を取得するために使用されるメソッドです。また、「2つのオブジェクトが同じプロトタイプを持っているかどうか」を比較したい場合にもよく活用されます。 以下に、getPrototypeOf()関数を使った具体的なコード例を示します。 コード例 <!DOCTYPE html> <html lang="ja"> <head> <meta cha
-
JavaScriptにおける継承の基本を具体例で解説
JavaScriptは、クラスベースではなくプロトタイプベースのオブジェクト指向言語です。そのため、継承はprototype(プロトタイプ)オブジェクトを通じて実現されます。コンストラクタ関数のprototypeプロパティにメソッドやプロパティを追加すると、そのコンストラクタから生成されたすべてのインスタンスが、それらを共有して利用できるようになります。 プロトタイプによる継承の仕組み JavaScriptでは、インスタンスからプロパティやメソッドが参照されるとき、まずオブジェクト自身を検索し、見つからなければプロトタイプチェーンをたどって上位のオブジェクトへと探しに行きます。これにより、各イ