JavaScriptで文字列内の各文字のn番目の出現箇所を置き換える方法
問題の概要
JavaScriptで、第一引数に文字列、第二引数に数値n、第三引数に文字cを受け取る関数を作成する必要があります。この関数は、文字列内の各文字のn番目の出現箇所を第三引数で指定された文字に置き換え、その結果の新しい文字列を返すものです。
実装のアプローチ
この問題は、以下の手順で解決できます。
- split('')メソッドで文字列を1文字ずつ分割する
- reduceメソッドとMapオブジェクトを使い、各文字の出現回数を追跡しながら結果の文字列を組み立てる
- 各文字がn番目に出現したタイミングで、指定された文字に置き換える
コード例
以下が実際のコードです。
const str = 'This is a sample string';
const num = 2;
const char = '*';
const replaceNthAppearance = (str, num, char) => {
const creds = str.split('').reduce((acc, val, ind, arr) => {
let { res, map } = acc;
if(!map.has(val)){
map.set(val, 1);
if(num === 0){
res += char;
}else{
res += val;
}
}else{
const freq = map.get(val);
if(num - freq === 1){
res += char;
}else{
res += val;
};
map.set(val, freq+1);
};
return { res, map };
}, {
res: '',
map: new Map()
});
return creds.res;
}
console.log(replaceNthAppearance(str, num, char));出力
コンソールには以下のように出力されます。
This ***a s*mple string
コードの解説
このコードでは、Mapオブジェクトを使って各文字がこれまでに何回出現したかを記録しています。文字列を1文字ずつ処理する際に、その文字が初めて出現した場合はMapに回数1を登録し、2回目以降の出現では記録された回数を確認します。出現回数がn番目に該当する場合は指定された文字に置き換え、それ以外の場合は元の文字をそのまま追加します。最終的に、reduceの初期値として渡したオブジェクトのresプロパティに、置き換え後の完全な文字列が格納されます。
この例ではnumが2のため、各文字の2回目の出現箇所がすべて「*」に置き換えられています。例えば「This is a sample string」では、2番目の「i」「s」「a」、そして2番目のスペースが「*」に変換されているのが確認できます。
-
JavaScriptで文字列内の特定の文字を入れ替える方法(kとlの位置をスワップ)
問題「k」「l」「m」の3種類の文字のみで構成された文字列を受け取るJavaScript関数を作成する必要があります。この関数の役割は、文字列内の「k」と「l」の位置を入れ替えることです。ただし、「m」はすべて元の位置にそのまま残す必要があります。解決コードの例以下がその実装コードです。 { let res = ; for(let i = 0; i < str.length; i++){ if (str[i] === k) { res += l; } else if (str[i] === l) {
-
JavaScriptで文字列内の文字を英字・数字・特殊文字に再グループ化する方法
問題文字列 str を第一引数(唯一の引数)として受け取る JavaScript 関数を作成する必要があります。この文字列には、次の3種類の文字が含まれる可能性があります。英字:(A-Z)、(a-z)数字:0〜9特殊文字:上記以外のすべての文字関数は文字列を先頭から順に走査し、ちょうど3つの要素からなる配列を構築します。1番目の要素には文字列に含まれるすべての英字、2番目には数字、3番目には特殊文字を格納し、それぞれ元の文字列内での出現順(相対的な順序)を維持します。最後にこの配列を返します。例えば、関数への入力が次の場合を考えてみましょう。入力const str = thi!1s is S@