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回しか登場していないため、これらだけが結果に残ります。
-
JavaScriptで文字列内の文字がすべて一意かどうかを判定する方法
問題JavaScriptの関数を作成することを目標とします。この関数は文字列を引数として受け取り、その文字列に含まれるすべての文字が一度だけ出現していれば true を返し、同じ文字が複数回出現していれば false を返します。コード例以下が実際のコードです。const str = thisconaluqe;const allUnique = (str = ) => { for(let i = 0; i < str.length; i++){  
-
JavaScriptで文字列から数字だけを抽出する方法
問題アルファベット・特殊文字・数字が混在した文字列 str を受け取り、その中に含まれる数字だけを元の順序のまま抽出して、新しい文字列として返すJavaScript関数を作成します。例えば、関数への入力が次の場合:const str = revd1fdfdfs2v34fd5gfgfd6gffg7ds;期待される出力は次のとおりです。const output = 1234567;解決コード以下がその実装例です。const str = revd1fdfdfs2v34fd5gfgfd6gffg7ds;const pickNumbers = (str = ) => { le