How do I replace a character at a particular index in JavaScript?

后端 未结 24 2144
孤城傲影
孤城傲影 2020-11-21 07:23

I have a string, let\'s say Hello world and I need to replace the char at index 3. How can I replace a char by specifying a index?

var str = \"h         


        
24条回答
  •  面向向阳花
    2020-11-21 08:01

    There are lot of answers here, and all of them are based on two methods:

    • METHOD1: split the string using two substrings and stuff the character between them
    • METHOD2: convert the string to character array, replace one array member and join it

    Personally, I would use these two methods in different cases. Let me explain.

    @FabioPhms: Your method was the one I initially used and I was afraid that it is bad on string with lots of characters. However, question is what's a lot of characters? I tested it on 10 "lorem ipsum" paragraphs and it took a few milliseconds. Then I tested it on 10 times larger string - there was really no big difference. Hm.

    @vsync, @Cory Mawhorter: Your comments are unambiguous; however, again, what is a large string? I agree that for 32...100kb performance should better and one should use substring-variant for this one operation of character replacement.

    But what will happen if I have to make quite a few replacements?

    I needed to perform my own tests to prove what is faster in that case. Let's say we have an algorithm that will manipulate a relatively short string that consists of 1000 characters. We expect that in average each character in that string will be replaced ~100 times. So, the code to test something like this is:

    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*
    }
    

    I created a fiddle for this, and it's here. There are two tests, TEST1 (substring) and TEST2 (array conversion).

    Results:

    • TEST1: 195ms
    • TEST2: 6ms

    It seems that array conversion beats substring by 2 orders of magnitude! So - what the hell happened here???

    What actually happens is that all operations in TEST2 are done on array itself, using assignment expression like strarr2[p] = n. Assignment is really fast compared to substring on a large string, and its clear that it's going to win.

    So, it's all about choosing the right tool for the job. Again.

提交回复
热议问题