JavaScriptで同形文字列(アイソモーフィック)を判定する方法
同形文字列とは?
2つの文字列(str1 と str2)について、str1 に含まれる文字を対応する文字へ置き換えることで str2 と一致させられる場合、この2つの文字列は「同形(アイソモーフィック)」であると言います。
例を見てみましょう。
const str1 = 'abcde'; const str2 = 'eabdc';
この2つの文字列は、同形文字列の一例です。
ここでは、2つの文字列を引数として受け取り、それらが同形であるかどうかを判定するJavaScript関数を作成します。
実装例
const str1 = 'abcde';
const str2 = 'eabdc';
const isIsomorphic = (str1 = '', str2 = '') => {
if (str1.length !== str2.length) {
return false;
};
for (let i = 0; i < str1.length; i++) {
const a = str1.indexOf(str1[i]);
const b = str2.indexOf(str2[i]);
if (str2[a] !== str2[i] || str1[b] !== str1[i]) {
return false;
};
};
return true;
};
console.log(isIsomorphic(str1, str2));コードの解説
この関数の処理の流れは以下のとおりです。
まず、2つの文字列の長さが異なる場合、文字の置き換えだけで一致させることは不可能なため、即座に false を返します。
次に、各文字について str1 と str2 のそれぞれで最初に出現する位置(インデックス)を indexOf メソッドで取得し、文字の対応関係が一貫しているかどうかを確認します。対応関係が崩れている箇所が1つでもあれば false を返し、すべての文字で対応関係が保たれていれば true を返します。
出力
コンソールには次のように出力されます。
true
-
JavaScriptのテンプレート文字列を使ってフォーマット済み文字列を作成する方法
JavaScriptでは、テンプレート文字列(テンプレートリテラル)を使用することで、変数や式を埋め込んだフォーマット済み文字列を簡単かつ直感的に作成できます。通常のシングルクォートやダブルクォートの代わりに、バッククォート(`)で文字列を囲み、${ } の中に変数名や式を記述するだけで、その評価結果が自動的に文字列へ挿入されます。従来の文字列連結(+ 演算子)と比べると、コードが読みやすくなり、複雑な文字列の組み立てもミスなく行えるのが大きなメリットです。以下は、テンプレート文字列を使ってオブジェクトの値を埋め込んだフォーマット済み文字列を作成するコード例です。サンプルコード<!DOC
-
JavaScriptでテンプレート文字列をネストする方法
JavaScriptのES6で導入されたテンプレート文字列(テンプレートリテラル)は、バッククォート(`)で囲むことで文字列の中に変数や式を埋め込める便利な機能です。実は、この${}(プレースホルダー)の中に、さらに別のテンプレート文字列を入れ子(ネスト)として記述することもできます。テンプレート文字列のネストとは${}の中には任意のJavaScript式を書けるため、その中で再度バッククォートを使ったテンプレート文字列を評価することが可能です。これにより、関数呼び出しの引数として動的に生成した文字列を渡すなど、柔軟な文字列組み立てが行えます。コード例以下は、ボタンをクリックすると、ネストされ