ここには多くの答えがあり、それらはすべて2つの方法に基づいています。
- 方法1:2つの部分文字列を使用して文字列を分割し、その間に文字を挿入します
- METHOD2:文字列を文字配列に変換し、1つの配列メンバーを置き換えて結合する
個人的には、この2つの方法を異なるケースで使用します。説明させてください。
@FabioPhms:あなたの方法は私が最初に使用した方法であり、多くの文字を含む文字列では悪いと思いました。しかし、問題はたくさんのキャラクターは何ですか?私は10の "lorem ipsum"段落でテストしましたが、数ミリ秒かかりました。次に、10倍の大きな文字列でテストしましたが、実際には大きな違いはありませんでした。うーん。
@ vsync、@ Cory Mawhorter:コメントは明確です。ただし、もう一度、大きな文字列とは何ですか。32 ... 100kbの場合はパフォーマンスが向上し、文字置換のこの1つの操作にはサブストリングバリアントを使用する必要があることに同意します。
しかし、かなりの数の交換が必要になった場合はどうなりますか?
私は自分のテストを実行して、その場合の方が速いことを証明する必要がありました。1000文字で構成される比較的短い文字列を操作するアルゴリズムがあるとします。平均して、その文字列の各文字は最大100回置換されると予想されます。したがって、このようなものをテストするコードは次のとおりです。
var str = "... {A LARGE STRING HERE} ...";
for(var i=0; i<100000; i++)
{
var n = '' + Math.floor(Math.random() * 10);
var p = Math.floor(Math.random() * 1000);
// replace character *n* on position *p*
}
私はこれのためのフィドルを作成しました、そしてそれはここにあります。TEST1(サブストリング)とTEST2(配列変換)の2つのテストがあります。
結果:
配列変換はサブストリングを2桁上回るようです!だから-ここで一体何が起こったの???
実際に発生するのは、TEST2のすべての操作がのような代入式を使用して、配列自体に対して行われることstrarr2[p] = n
です。割り当ては、大きな文字列の部分文字列と比較して本当に高速であり、それが勝つことは明らかです。
つまり、すべては、その仕事に適したツールを選択することです。再び。
str[0] = 'x'
エラーがスローされないようですが、望ましい効果が得られないことです。