最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

javascript - .filter and .includes to filter array with array? - Stack Overflow

programmeradmin1浏览0评论

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

Share Improve this question edited Feb 1, 2021 at 21:51 itsolidude asked Dec 13, 2017 at 4:43 itsolidudeitsolidude 1,2493 gold badges12 silver badges25 bronze badges 4
  • 5 u prolly shouldnt call javascript "java" since java is a completely diff programming language... :/ – oldboy Commented Dec 13, 2017 at 4:46
  • You need to clearly tell in your code which array is for – brk 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. – castletheperson Commented Dec 13, 2017 at 4:47
  • Iterate over your array which array? – brk Commented Dec 13, 2017 at 4:48
Add a comment  | 

4 Answers 4

Reset to default 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).

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(' '));

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

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)
)
发布评论

评论列表(0)

  1. 暂无评论