JavaScriptで文字列からn文字をアルファベット順に削除する方法
問題
今回は、小文字の英字で構成された文字列と数値 num を引数として受け取るJavaScript関数を作成します。この関数の役割は、文字列から num 文字を「アルファベット順」に削除することです。
ここでいう「アルファベット順に削除する」とは、まず 'a' が存在すればすべて取り除き、次に 'b'、続いて 'c' というように、a から z の順番で目的の文字数に達するまで削除を繰り返すことを意味します。
コード例
以下が実際のコードです。
const str = 'abascus';
const num = 4;
const removeAlphabetically = (str = '', num = '') => {
const legend = "abcdefghijklmnopqrstuvwxyz";
for(let i = 0; i < legend.length; i+=1){
while(str.includes(legend[i]) && num > 0){
str = str.replace(legend[i], "");
num -= 1;
};
};
return str;
};
console.log(removeAlphabetically(str, num));
実行結果
コンソールには次のように出力されます。
sus
コードの解説
このコードの動作を整理すると、次のようになっています。
- legend:アルファベット a〜z をすべて格納した基準となる文字列です。
- 外側のforループ:'a' から 'z' へ向かって、アルファベットを先頭から順に走査します。
- 内側のwhileループ:現在注目している文字が対象文字列に含まれており、かつ残りの削除回数(num)が0より大きい間、replace() メソッドで最初に見つかった1文字を削除し、num を1ずつ減らしていきます。
- すべてのループが完了した後、加工済みの文字列を返します。
処理の流れ(具体例)
入力が 'abascus'・num = 4 の場合の処理の流れは次の通りです。
- 'a' が2つ含まれているため、2文字削除 → 残りは 'bscus'(num = 2)
- 'b' が1つ含まれているため、1文字削除 → 残りは 'scus'(num = 1)
- 'c' が1つ含まれているため、1文字削除 → 残りは 'sus'(num = 0)
- num が0になったため削除を終了し、最終結果として 'sus' を返します。
ポイントは、replace() が最初に一致した1箇所しか置換しないという特性です。そのため、同じ文字が複数含まれる場合でも、whileループと組み合わせることで1文字ずつ確実に削除できます。
-
JavaScriptで文字列の配列からコメントを削除する方法
この記事では、JavaScriptを使って文字列の配列からコメント部分を削除する方法について解説します。 問題 文字列の配列 arr を第一引数として、特殊文字の配列 starters を第二引数として受け取るJavaScript関数を作成する必要があります。 starters 配列には、コメントの開始となり得る文字が格納されています。作成する関数は、配列 arr を走査し、各文字列に含まれるコメントをすべて削除した結果を返すものとします。 例えば、関数への入力が次のような場合を考えてみましょう。 const arr = [ red, green !blue
-
JavaScriptで文字列内の文字を英字・数字・特殊文字に再グループ化する方法
問題文字列 str を第一引数(唯一の引数)として受け取る JavaScript 関数を作成する必要があります。この文字列には、次の3種類の文字が含まれる可能性があります。英字:(A-Z)、(a-z)数字:0〜9特殊文字:上記以外のすべての文字関数は文字列を先頭から順に走査し、ちょうど3つの要素からなる配列を構築します。1番目の要素には文字列に含まれるすべての英字、2番目には数字、3番目には特殊文字を格納し、それぞれ元の文字列内での出現順(相対的な順序)を維持します。最後にこの配列を返します。例えば、関数への入力が次の場合を考えてみましょう。入力const str = thi!1s is S@