es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

replaceAll en JavaScript en el bucle for es demasiado lento, buscando una aproximación alternativa.

Estoy haciendo una extensión de navegador que reemplaza todas las palabras groseras en un sitio web con ***.
En este momento, tengo una gran variedad de JS con todas las palabras groseras (más de 2k palabras).
Estoy usando un bucle for para iterar sobre cada palabra en el array profaneWords y reemplazar cualquier instancia de una palabra coincidente con ***:

javascript
for (let i = 0; i < profaneWords.length; i++) {
let element = profaneWords[i];
document.body.innerHTML = document.body.innerHTML.replaceAll(
element,
"***"
);
}

Con esto, mi navegador tarda unos 5 minutos en buscar y reemplazar todas las instancias de todas las palabras groseras en un sitio web, con ***. Pero, antes de que se hayan terminado de recorrer las palabras, no se realizan cambios en el sitio web. Entonces, durante los 5 minutos, parece que no está sucediendo nada.

Probé este método con otro array que era mucho más pequeño (10 palabras) y el reemplazo fue casi instantáneo.

¿Hay una mejor manera en que pueda implementar esto para mi matriz con más de 2000 elementos?

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Sí, hay una manera más eficiente de implementar esto para una gran matriz de más de 2000 elementos. En lugar de recorrer cada palabra en la matriz y reemplazarla en todo el cuerpo HTML usando la función replaceAll, considere usar una expresión regular y la función replace.

    Aquí hay un ejemplo:

        const profaneWordsRegex = new RegExp(profaneWords.join("|"), "gi"); 
        document.body.innerHTML = document.body.innerHTML.replace(profaneWordsRegex, "***");
    

    Este código crea una expresión regular que coincide con todas las palabras groseras en la matriz usando la función join y el separador |. Las banderas gi hacen que la coincidencia sea global y sin distinción entre mayúsculas y minúsculas. Luego, se usa la función replace en el cuerpo HTML para reemplazar todas las instancias de palabras groseras con ***.

    Este método debería ser mucho más rápido y eficiente que recorrer cada palabra por separado. Además, debería mostrar los cambios en el sitio web tan pronto como se hagan, sin tener que esperar a que termine todo el ciclo.

Comments are closed.