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

JavaScriptで2番目の文字列に存在しない文字を最初の文字列から削除する方法

この記事では、2つの文字列を受け取り、1番目の文字列のうち、2番目の文字列にも含まれている文字だけを残した新しい文字列を返すJavaScript関数の実装方法を解説します。

要件の整理

求められている仕様は以下の通りです。

  • 関数は2つの文字列を引数として受け取る
  • 1番目の文字列から、2番目の文字列に存在しない文字を削除する
  • 返される文字列内の文字の出現順序は、元の1番目の文字列と同じ順序を保つ

実装コード

実際のコードは次のようになります。

const str1 = 'abcdefgh';
const str2 = 'banana';
const deleteSelectively = (str1 = '', str2 = '') => {
    let strArr1 = str1.split('');
    const strArr2 = str2.split('');
    const map = {};
    strArr2.forEach(el => {
        map[el] = 1;
    });
    strArr1 = strArr1.filter(el => {
        return map.hasOwnProperty(el);
    });
    return strArr1.join('');
};
console.log(deleteSelectively(str1, str2));

出力結果

コンソールには次のように出力されます。

ab

コードの解説

この実装のポイントは以下の通りです。

  • split('')による配列化: 両方の文字列を split('') で1文字ずつの配列に分解し、扱いやすくしています。
  • ルックアップ用オブジェクトの作成: 2番目の文字列の各文字をキーとしてオブジェクト map に登録することで、文字が存在するかどうかを O(1) で高速に判定できます。
  • filter()による絞り込み: hasOwnProperty() を使って、1番目の文字列の各文字がマップに存在する場合だけを残します。filter() は元の配列の順序を維持するため、出現順序の要件も自然に満たされます。
  • join('')による再結合: 最後にフィルタリング済みの配列を文字列に戻して返却します。

この例では、str1 の「abcdefgh」のうち str2「banana」に含まれるのは「a」と「b」だけなので、結果は「ab」となります。

  1. C++で最初の配列に存在し、2番目の配列には存在しない要素を検索する方法

    概要2つの配列AとBが与えられたとき、配列Aには存在するが配列Bには存在しない要素をすべて見つける方法を解説します。AとBをそれぞれ集合(セット)とみなすと、この操作は「差集合(Set Difference)」の計算に相当します。C++では、標準ライブラリの std::set_difference アルゴリズムを使うことで、この差集合を簡単かつ効率的に求めることができます。set_differenceを使う際のポイントstd::set_difference は <algorithm> ヘッダで定義されているアルゴリズムです。使用する際は、以下の点に注意しましょう。入力となる両方の範

  2. 【Python入門】最初の文字列にだけ含まれる文字を抽出して表示する方法

    1つ目の文字列には存在するが、2つ目の文字列には存在しない文字を表示したい場合、ユーザーから2つの文字列を入力として受け取り、「set(集合)」を使って両者の差分を求めるのが効果的です。Pythonには「set」というデータ型が標準で用意されています。setは重複しない一意な要素のみを格納できるデータ構造です。setは、積集合(intersection)、差集合(difference)、和集合(union)、対称差(symmetric difference)といった集合演算を行う際に非常に便利です。サンプルコード以下に実際の実行例を示します。my_str_1 = input(Enter the