Rolf b: replace_nth() auch mit negativer Positionsangabe

Beitrag lesen

Nachtrag: Habe Laufzeiten gemessen (in IE11 und Chrome)

Das hier ist die schnellste Implementierung, die mir gelungen ist, sie setzt das Ergebnis rückwärts zusammen. Vermutlich deshalb schneller, weil sie items.length nur einmal abfragt und eine Stringverkettung weniger macht. Lösungen mit join() sind schlechter, Chrome ist dabei extrem langsam, deswegen ist auch eine Lösung mit map() in Chrome nix, und Ausweichen auf reduce() (um in der Callback-Funktion wieder Stringverkettung zu betreiben) hat auch zu viel Overhead.

Selbst die Replace-All Variante ist in der for-Schleife schneller als ein join(''). Danke, Brendan!

function replace_nth(input, search, replace, occur)
{
   var items = input.split(search);
   if (occur < 0)
      occur = items.length + occur;
   occur--;

   var result = items.pop();
   for (var i=items.length-1; i>=0; i--)
   {
      result = items[i] + ((occur == -1 || i == occur) ? replace : search) + result;
   }
   return result;
}

Rolf