5

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)

4
  • 6
    u prolly shouldnt call javascript "java" since java is a completely diff programming language... :/ Commented Dec 13, 2017 at 4:46
  • You need to clearly tell in your code which array is for Commented Dec 13, 2017 at 4:47
  • Filter with function(word) { return !unnecessaryWords.includes(word); } if you want to only include words that aren't present in unnecessaryWords. Commented Dec 13, 2017 at 4:47
  • Iterate over your array which array? Commented Dec 13, 2017 at 4:48

4 Answers 4

11

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).

Sign up to request clarification or add additional context in comments.

1 Comment

I was about to write the same thing :p
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(' '));

Comments

0

The filter function expected you to return true or false in the callback. To check if an item exists in an array, use indexOf. You don't need to use let unless you plan on reassigning the variable.

Result:

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.';

const overusedWords = ['really', 'very', 'basically'];
const unnecessaryWords = ['extremely', 'literally', 'actually' ];
const storyWords = story.split(' ');
console.log(storyWords.length);

const betterWords = storyWords.filter(function(word){
  return unnecessaryWords.indexOf(word) < 0;
});
console.log(betterWords);

2 Comments

@klugojo what is the < 0 for? isnt IndexOf boolean?
indexOf is an integer representing the index of the element in the array. It is equal to -1 if the element is not found. Conclusion, unnecessaryWords.indexOf(word) < 0 means word does not exist inside unnecessaryWords
0

you can do the following which can be easily read and understood at a glance. another benefit, if unnecessary words is not indeed dynamic, is that the length of unnecessaryWords is readily evident, which could come in handy if in the future when you're reviewing/editing/etc your code

let betterWords = storyWords.filter( (v) =>
  (
    v !== unnecessaryWords[0] &&
    v !== unnecessaryWords[1] &&
    v !== unnecessaryWords[2]
  )
)

or if the unnecessaryWords array is dynamic...

let betterWords = storyWords.filter( (v) =>
  return !unnecessaryWords.includes(v)
)

1 Comment

Why check against each element of unnecessaryWords in that way?You could have used storyWords.filter((v)=>unnecesaryWords.indexOf(v) == -1)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.