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

【JavaScript】配列内の重複文字を含まない最初の文字列を見つける方法

次のような、重複した文字を含む可能性のある文字列の配列があるとします。

const arr = ['54gdgdfe3', '434ffd', '43frdf', '43fdhnh', 'wgcxhjny', 'fsdf34'];

ここでの課題は、このような配列を受け取り、「重複した文字を1つも含まない」最初の要素を返すJavaScript関数を作成することです。もし該当する文字列が配列内に存在しない場合は、falseを返す必要があります。

それでは、この関数を実装していきましょう。

実装のポイント

まず、文字列内のすべての文字が一意(ユニーク)であるかどうかを判定するヘルパー関数 isUnique を用意します。split('') で文字列を1文字ずつの配列に分解し、every() メソッドを使って各文字をチェックします。各文字に対して indexOf()lastIndexOf() の結果が一致すれば、その文字は文字列内に1回しか出現していないことになります。

続いて、findUniqueString 関数で配列を先頭から順番に走査し、isUniquetrue を返す最初の要素を見つけたら即座に return します。ループが最後まで完了しても該当する文字列が見つからなければ、false を返します。

コード例

const arr = ['54gdgdfe3', '434ffd', '43frdf', '43fdhnh', 'wgcxhjny', 'fsdf34'];
const isUnique = str => {
    return str.split('').every(el => str.indexOf(el) === str.lastIndexOf(el));
};
const findUniqueString = arr => {
    for(let i = 0; i < arr.length; i++){
        if(isUnique(arr[i])){
            return arr[i];
        };
    };
    return false;
};
console.log(findUniqueString(arr));

出力結果

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

wgcxhjny

処理の流れを解説

この例では、「wgcxhjny」の8文字がすべて異なるため、配列の中で最初の「重複なし」の文字列として検出されました。それより前の「54gdgdfe3」「434ffd」「43frdf」「43fdhnh」は、それぞれ重複した文字(たとえば「4」や「d」「f」など)を含んでいるため、チェックの段階でスキップされています。

このアプローチの計算量は、文字列の長さを n とすると各文字列の判定に O(n²) かかりますが、コードがシンプルで理解しやすいのが特徴です。より長い文字列を扱う場合は、Set オブジェクトを使って文字の出現を記録する方法に置き換えることで、O(n) まで高速化することも可能です。

  1. JavaScriptで文字列の配列からコメントを削除する方法

    この記事では、JavaScriptを使って文字列の配列からコメント部分を削除する方法について解説します。 問題 文字列の配列 arr を第一引数として、特殊文字の配列 starters を第二引数として受け取るJavaScript関数を作成する必要があります。 starters 配列には、コメントの開始となり得る文字が格納されています。作成する関数は、配列 arr を走査し、各文字列に含まれるコメントをすべて削除した結果を返すものとします。 例えば、関数への入力が次のような場合を考えてみましょう。 const arr = [    red, green !blue

  2. JavaScriptで配列を電話番号形式の文字列に変換する方法

    問題ちょうど10個の正の整数を含む配列 arr を受け取るJavaScript関数を作成することを考えます。この関数は、配列の要素を一般的な電話番号の形式である「(XXX) XXX-XXXX」の文字列に組み立てて返す必要があります。例えば、関数への入力が以下の場合を考えてみましょう。入力const arr = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0];出力const output = (987) 654-3210;コード例以下がその実装コードです。const arr = [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]; const createNumber =