I'm making a browser extension that replaces all profane words on a website with ***
.
Right now, I have a huge JS array with all the profane words (2k words).
I'm using a for loop to loop over each word in the profaneWords
array and replace any instance of a matching word with ***
:
for (let i = 0; i < profaneWords.length; i ) {
let element = profaneWords[i];
document.body.innerHTML = document.body.innerHTML.replaceAll(
element,
"***"
);
}
With this, it takes about 5 minutes for my browser to search and replace all instances of all the profane words on a website, with ***
. But, before it is done mapping over the words, no changes are made to the website. So for the 5 minutes, it looks like nothing is happening.
I tested this method with another array that was much smaller (10 words) and the replacing was almost instant.
Is there a better way I could go about implementing this for my array with over 2000 elements?
CodePudding user response:
Have you considered using RegExp?
const str = 'Waiting on ass, asset , and tit titillation, ass.';
const profaneWords = ['ass', 'tit'];
const regex = new RegExp('\\b' profaneWords.join('\\b|\\b') '\\b', 'g');
var newstr = str.replace(regex, '***');
console.log(newstr);
<iframe name="sif1" sandbox="allow-forms allow-modals allow-scripts" frameborder="0"></iframe>