JavaScriptで大文字・小文字を入れ替えるスワップケース関数の実装方法
はじめに
本記事では、文字列を引数として1つだけ受け取るJavaScript関数を実装します。入力される文字列には、大文字と小文字のアルファベットが混在している可能性があります。
この関数の役割は、入力文字列をもとに新しい文字列を生成することです。具体的には、すべての大文字を小文字へ、すべての小文字を大文字へと変換します(いわゆる「スワップケース」処理です)。記号や数字など、アルファベット以外の文字はそのまま維持されます。
実装の考え方
各文字が小文字かどうかを判定し、小文字なら大文字へ、それ以外なら小文字へ変換するのが基本的なアプローチです。toLowerCase() と toUpperCase() を活用すれば、シンプルに判定できます。
サンプルコード
const str = 'ThIs Is A STriNG';
const swapCase = (str = '') => {
let res = '';
for (let i = 0; i < str.length; i++) {
const char = str[i];
// 小文字と等しければ小文字(または記号・数字)なので大文字へ変換
if (char === char.toLowerCase()) {
res += char.toUpperCase();
} else {
// 大文字の場合は小文字へ変換
res += char.toLowerCase();
}
}
return res;
};
console.log(swapCase(str));ここでの判定ロジックは次の通りです。
char === char.toLowerCase()が成り立つ場合、その文字はもともと小文字か、変化しない記号・数字であるため、toUpperCase()を適用しても安全です。- それ以外の場合は大文字なので、
toLowerCase()で小文字へ変換します。
出力結果
コンソールには次のように出力されます。
tHiS iS a stRIng
より簡潔な書き方:mapを使った実装
配列メソッドの map() を使うと、同じ処理をより宣言的かつ簡潔に記述できます。
const swapCase = (str = '') =>
[...str]
.map(char => char === char.toLowerCase()
? char.toUpperCase()
: char.toLowerCase())
.join('');
console.log(swapCase('ThIs Is A STriNG')); // tHiS iS a stRIngスプレッド構文 [...str] で文字列を1文字ずつの配列に分解し、各文字を変換してから join('') で連結しています。ループ処理を自分で書く必要がないため、可読性の高い実装と言えます。
まとめ
大文字と小文字の入れ替えは、toLowerCase() / toUpperCase() の結果と元の文字を比較するだけで簡単に実現できます。文字単位のループでも map() を使った方法でも、記号や数字が意図せず変更されない点は共通しているので、用途に応じて読みやすい方を選択するとよいでしょう。
-
JavaScriptの関数プロトタイプとは?仕組みと使い方を解説
JavaScriptで作成されたすべての関数には、JavaScriptエンジンによって自動的にprototypeプロパティが追加されます。このprototypeプロパティはオブジェクトであり、デフォルトではconstructorプロパティを含んでいます。関数のプロトタイプには、以下のようにしてアクセスできます。functionName.prototypeコンストラクタ関数を使ってオブジェクトを生成する場合、このprototypeプロパティを活用することで、同じコンストラクタから作成された複数のオブジェクト間でメソッドやプロパティを効率的に共有することができます。これにより、各インスタンスごとに
-
JavaScriptでのメソッド借用:call()・apply()・bind()の使い方を解説
JavaScriptでは、call()、apply()、bind()という3つのメソッドを使うことで、あるオブジェクトが持つメソッドを別のオブジェクトが「借用」できます。これは、本来そのメソッドを持たないオブジェクトに対して、thisの参照先を差し替えてメソッドを実行できる便利なテクニックです。 3つのメソッドの違い call():引数をカンマ区切りで個別に渡し、即座に関数を実行します。 apply():引数を配列(または配列風オブジェクト)として渡し、即座に関数を実行します。 bind():thisを固定した新しい関数を返すだけで、即座には実行されません。返された関数は後から好きなタイミン