¿Cuál es la forma más rápida y eficiente de hacer una sustitución / sustitución de cadenas dentro de una cadena grande con JavaScript?

La forma más eficiente parece ser usar indexOf() , de acuerdo con este punto de referencia:
http://jsperf.com/string-substit…

El código es el siguiente (tenga en cuenta que no soy el autor original de este código):

 function replace(str) { var outstr = '', start = -1, end = 0; while((end = str.indexOf('{', ++start)) > -1) { outstr += str.slice(start, end); start = end; if ((end = str.indexOf('}', start)) > -1) { outstr += obj[str.slice(start + 1, end)]; start = end; } } return outstr + str.slice(start); } 

La función de replace toma una cadena como parámetro y reemplaza cada aparición de {something} con el valor de obj["something"] (tenga en cuenta que esto no funciona si something no es una clave del objeto obj global).
El algoritmo es el siguiente:

  // esto es pseudocódigo
 Deje que S1 sea la cadena de entrada
 Deje que S2 sea la cadena de salida (vacía al principio)
 Deje que Start y End sean índices numéricos de S1, comenzando en -1 y 0, respectivamente
 Deje que Obj sea el objeto donde se almacenan los valores reemplazados.

 Si bien hay un carácter '{' en S1 después de Start + 1 do:

   inicio incremental
   establezca End en el índice del carácter '{'
   agregue la parte de S1 entre Inicio y Fin a S2
   Establecer inicio a fin

   Si hay un carácter '}' en S1 después de Inicio, haga lo siguiente:

     Establezca Fin en el índice del carácter '}'
     Agregue Obj [Clave] a S2, donde Clave es la parte de S1 entre
       Inicio + 1 y Fin, por ejemplo, la parte entre '{' y '}'
     Establecer fin para comenzar
  
   terminara si
 finMientras

 devuelve S2 concatenado a la parte de S1 entre Inicio y el final de la cadena 

Muchos factores a tener en cuenta: el tiempo de ejecución real variará según factores como: el navegador que se utiliza, la longitud exacta del pajar, la longitud exacta de la aguja, el número de golpes, ¿es un reemplazo de cadena recta o un reemplazo de RegEx / patrón, etc.
Una documentación interesante de una implementación de JavaScript de “trim ()”: http://blog.stevenlevithan.com/a

More Interesting

¿Existe alguna fórmula o algoritmo que determine / calcule los precios del gas o del petróleo?

¿Por qué las computadoras se crean de tal manera que entiendan 0s y 1s?

¿Por qué no podemos ejecutar Bellman Ford desde la fuente y relajar los bordes de los vecinos de forma recursiva y hacer una sola pasada a través de los bordes?

¿Es el tiempo de blog digno de mí?

¿Qué debo hacer si no soy bueno en el desarrollo de backend o en los algoritmos, debería enfocarme en UI / UX?

¿Qué temas puedo estudiar después de aprender Java y C (aplicaciones de estructuras de datos, etc.)?

Cómo demostrar que este gráfico todavía puede estar fuertemente conectado

Si f (n) es O (g (n)) yf (n) es O (h (n)), entonces cuál de las siguientes afirmaciones debe ser verdadera: f (n) + g (n) es O (h (n)), g (n) + h (n) es O (f (n)), f (n) es O (g (n) + h (n)), o ninguno de los anteriores?

¿Qué es el algoritmo ABC?

Cómo reducir los componentes fuertemente conectados en nodos únicos de manera eficiente si estoy usando una representación de lista de adyacencia

Soy un programador promedio, me encanta codificar en Java y estoy tratando de mejorar mis habilidades de codificación algorítmica. ¿Cómo puedo mejorarlos?

¿Algún algoritmo de aprendizaje profundo quedará obsoleto algún día con los algoritmos tradicionales? ¿O los algoritmos de aprendizaje profundo solo son adecuados para problemas específicos?

¿Cómo puedo usar el algoritmo de Baum-Welch para agregar observaciones perdidas?

¿Por qué obtengo el índice de cadenas fuera de rango?

¿Cuáles son los tiempos de ejecución para insertar un elemento en un LinkedList en la cabeza, el final y en algún lugar en el medio?