【问题标题】:.filter to iterate over an array.filter 遍历数组
【发布时间】:2017-12-23 17:19:54
【问题描述】:

我正在尝试遍历一个数组以过滤掉我不希望在新数组中出现的某些单词。

我可以使用 for 循环来做到这一点,但我正在学习并尝试使用迭代器。

我的代码如下:

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 unnecessaryWords = ['extremely', 'literally', 'actually' ];

let storyWords = story.split(' ');

let betterWords = storyWords.filter(function(words) {
     return words !== unnecessaryWords[0];
});

console.log(betterWords.join(' '));

我正在尝试从 storyWords(story) 数组中删除不必要的单词。现在它会取出不必要的话中的第一个元素,但我不能让它同时完成这三个。感谢您的帮助!

【问题讨论】:

    标签: javascript arrays iterator


    【解决方案1】:

    您可以使用includes 来检查该元素是否存在于数组中。 Arrayincludes方法判断数组是否包含某个元素,根据情况返回true或false。

    请注意,它是 ES6 功能。所以,请检查浏览器的兼容性或使用 polyfill。

    unnecessaryWords.includes(words);

    完整代码:

    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 unnecessaryWords = ['extremely', 'literally', 'actually' ];
    
    let storyWords = story.split(' ');
    
    let betterWords = storyWords.filter(function(words) {
         return !unnecessaryWords.includes(words);
    });
    
    console.log(betterWords.join(' '));

    【讨论】:

    • 请注意,includes() 如果使用客户端,则不支持完整的浏览器
    • @charlietfl - 谢谢,我在答案中添加了信息。
    【解决方案2】:

    你可以在这里使用indexOf(),使用indexOf检查单词是否在不必要的单词数组中并过滤掉。

       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 unnecessaryWords = ['extremely', 'literally', 'actually' ];
    
    let storyWords = story.split(' ');
    
    let betterWords = storyWords.filter(function(words) {
         return unnecessaryWords.indexOf(words) < 0;
    });
    
    console.log(betterWords.join(' '));

    【讨论】:

    • unnecessaryWords.indexOf(words) &gt;= 0 已经是一个布尔值...不需要三元数
    【解决方案3】:
    var filtered = storyWords.filter(function(e) {
        return this.indexOf(e) < 0;
    }, unnecessarywords);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-04-12
      • 2016-01-31
      相关资源
      最近更新 更多