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?
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ónreplace
.Aquí hay un ejemplo:
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 banderasgi
hacen que la coincidencia sea global y sin distinción entre mayúsculas y minúsculas. Luego, se usa la funciónreplace
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.