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

JavaScriptで文字列から重複を除いて一意な文字だけを抽出する方法

問題

JavaScriptで、文字列 str を引数として受け取る関数を作成します。この関数は、入力文字列の中で一度だけ出現する文字(一意な文字)だけで構成される新しい文字列を組み立てて返す必要があります。言い換えると、重複して現れるすべての文字を取り除く処理です。

コード例

以下がその実装例です。

const str = 'hey there i am using javascript';

const removeAllDuplicates = (str = '') => {
    let res = '';
    for(let i = 0; i < str.length; i++){
        const el = str[i];
        if(str.indexOf(el) === str.lastIndexOf(el)){
            res += el;
            continue;
        };
    };
    return res;
};

console.log(removeAllDuplicates(str));

コードの解説

このアプローチの鍵となるのは、indexOf()lastIndexOf() の組み合わせです。

  • 文字列を先頭から1文字ずつループで走査します。
  • str.indexOf(el) はその文字が最初に出現する位置を、str.lastIndexOf(el)最後に出現する位置を返します。
  • 両者の値が一致していれば、その文字は文字列全体で1回しか登場しない、つまり「一意」であることが分かります。
  • 条件を満たした文字だけを結果用の文字列 res に連結し、最後にそれを返します。

空白も1つの文字として扱われるため、スペースが複数回登場する場合は結果から除外されます。

補足:別のアプローチ

split()filter() を使えば、より簡潔に関数型のスタイルで書くこともできます。

const removeAllDuplicates = (str = '') =>
  str
    .split('')
    .filter((el, _, arr) => arr.indexOf(el) === arr.lastIndexOf(el))
    .join('');

出力

コンソールには以下のように表示されます。

ymungjvcp

この例では、「y」「m」「u」「n」「g」「j」「v」「c」「p」の9文字がそれぞれ1回しか登場していないため、これらだけが結果に残ります。

  1. JavaScriptで文字列内の文字がすべて一意かどうかを判定する方法

    問題JavaScriptの関数を作成することを目標とします。この関数は文字列を引数として受け取り、その文字列に含まれるすべての文字が一度だけ出現していれば true を返し、同じ文字が複数回出現していれば false を返します。コード例以下が実際のコードです。const str = thisconaluqe;const allUnique = (str = ) => {    for(let i = 0; i < str.length; i++){        

  2. JavaScriptで文字列から数字だけを抽出する方法

    問題アルファベット・特殊文字・数字が混在した文字列 str を受け取り、その中に含まれる数字だけを元の順序のまま抽出して、新しい文字列として返すJavaScript関数を作成します。例えば、関数への入力が次の場合:const str = revd1fdfdfs2v34fd5gfgfd6gffg7ds;期待される出力は次のとおりです。const output = 1234567;解決コード以下がその実装例です。const str = revd1fdfdfs2v34fd5gfgfd6gffg7ds;const pickNumbers = (str = ) => {  le