.filter and .includes to filter array with array?

10,603

Solution 1

You should check if the current word is included or not in the array unnecessaryWords:

let betterWords = storyWords.filter(function(currentWord) {
    return !unnecessaryWords.includes(currentWord);
});

filter will loop the array storyWords, and for each word currentWord of that array, it will call a function, if that function returns true then the currentWord will be included in the result array, otherwise it won't. Now, for each currentWord, we want to check if unnecessaryWords includes it or not, if it includes it, we will return false, if not, we will return true. The operator ! is used to invert a boolean value (if includes return true we want to return false, if it return false we want to return true, so we just use ! to invert the result of includes and return).

Solution 2

In this exercise it is recommended to use .filter() and .includes() methods, the important thing is to say "not include" (pay attention to the ! symbol)

let betterWords = storyWords.filter(word => { return !unnecessaryWords.includes(word); })

then You can print the result to see it working:

console.log(betterWords.join(' '));
Share:
10,603
itsolidude
Author by

itsolidude

Updated on June 15, 2022

Comments

  • itsolidude
    itsolidude almost 2 years

    i am pretty new to javascript and doing a course to gain some experience but i am breaking my head on the return concept sometimes. Basically this is the task i am stuck at:

    There is an array of words that are unnecessary. Iterate over your array to filter out these words. Save the remaining words in an array called betterWords. There are several ways that you could achieve this.

    i tried so many different things... but i cant get it to work.

    code :

    let story = 'Last weekend, I took literally the most beautiful bike ride of my life. The route is called "The 9W to Nyack" and it actually stretches all the way from Riverside Park in Manhattan to South Nyack, New Jersey. It\'s really an adventure from beginning to end! It is a 48 mile loop and it basically took me an entire day. I stopped at Riverbank State Park to take some extremely artsy photos. It was a short stop, though, because I had a really long way left to go. After a quick photo op at the very popular Little Red Lighthouse, I began my trek across the George Washington Bridge into New Jersey.  The GW is actually very long - 4,760 feet! I was already very tired by the time I got to the other side.  An hour later, I reached Greenbrook Nature Sanctuary, an extremely beautiful park along the coast of the Hudson.  Something that was very surprising to me was that near the end of the route you actually cross back into New York! At this point, you are very close to the end.';
    
    let overusedWords = ['really', 'very', 'basically'];
    let unnecessaryWords = ['extremely', 'literally', 'actually' ];
    let storyWords = story.split(' ');
    console.log(storyWords.length);
    
    let betterWords = storyWords.filter(function(words){
      if(story.includes(unnecessaryWords) === false){
        return words;
      }
    });
    console.log(betterWords);

    I know you guys may find errors that are stupid in your eyes but im here to learn from my errors and to finally get this damn return concept into my brain (i got no problem with simple returns but when its nested im confused lol)