Follow

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use
Contact

How to compare two arrays of strings, find all matches, when there might be a sentence?

This is a fun one – I am building a profanity checker!

For the purposes of this exercise, let’s have an array of forbidden words, like so:

const forbiddenWords = ['apples', 'oranges', 'blue carrots', 'mushy green peas'];

MEDevel.com: Open-source for Healthcare and Education

Collecting and validating open-source software for healthcare, education, enterprise, development, medical imaging, medical records, and digital pathology.

Visit Medevel

Then I will have an input field for a user to input the something. It could be an infinite combo of words, but I would like to find ALL instances of the forbidden words and return them as an array. I’ve thought of this function, which gets me really close:

const forbiddenWords = ['apples', 'oranges', 'blue carrots', 'mushy green peas'];
const userInput = 'Broccoli is my favorite food. I hate oranges and blue carrots';

    const checkIfValidInput = () => {
        // Will return an array that looks like: ['Broccoli', 'is', 'my', 'favorite', ...]
        const splitWords = userInput.split(" ");
        const array = [];
        for (let i in forbiddenWords) {
            if (splitWords.indexOf(forbiddenWords[i]) !== -1) {
                array.push(forbiddenWords[i]);
            }
        }
        return array.sort((x, y) => x - y);
    };

Running the above will make the result of array be ['oranges', 'blue', 'carrots']. How could I build out the function to check for 'blue carrots' or 'mushy green peas' all in one? I’d like the above function to return: ['oranges', 'blue carrots'].
Thoughts?

>Solution :

You can use regex for this situation. This will also give you ability to match with case insensitivity

const checkIfValidInput = () => {
  const forbiddenWords = ['apples', 'oranges', 'blue carrots', 'mushy green peas'];
  const userInput = 'Broccoli is my favorite food. I hate oranges and blue carrots';
  
  const result = forbiddenWords.reduce((acc, words) => {
    const match = userInput.match(new RegExp(words, ['gi']))
    return match ? acc.concat(match) : acc
  }, [])
  result.sort()
  console.log(result)
}

checkIfValidInput()

Also, array.sort((x, y) => x - y); is not required as the values you have are string. You can rely on array.sort() or if you really want to do manual sort, try string.localeCompare(string2)

Add a comment

Leave a Reply

Keep Up to Date with the Most Important News

By pressing the Subscribe button, you confirm that you have read and are agreeing to our Privacy Policy and Terms of Use

Discover more from Dev solutions

Subscribe now to keep reading and get access to the full archive.

Continue reading