簡體   English   中英

如何使用一個字符串數組過濾另一個字符串數組(JS)

[英]How to Use One Array of Strings to Filter Another Array of Strings (JS)

給定一組歌曲,這些歌曲是同一首歌的不同版本:

const songArray = ["Holiday", "Holiday - Remastered Remix", "Holiday - Live in Portugal", "Holiday (Remix)", "Like a Prayer", "Like a Prayer - Remaster", "Like a Prayer - Remixed 2012", "Music", "Music (Remix)" ]

我如何使用我創建的另一個“過濾詞”數組循環:

const filterWords = ["Remaster", "- Live in", "Remix"]

取回不包括那些過濾器的所有內容。

IE:

const filteredSongs = ["Holiday", "Like a Prayer", "Music"]

我試過在網上找到答案,但我似乎只找到了搜索一個過濾詞的例子,而不是多個。

我試過嵌套循環、.includes()、.filter(),但我也遇到了問題,因為有些曲目將包含多個過濾詞(例如,“Holiday - Remastered Remix”同時包含“Remaster”和“Remix”),因此將被推送到一個新數組兩次。

就像是:

    songArray = ["Holiday", "Holiday - Remastered Remix", "Holiday - Live in Portugal", "Holiday     (Remix)", "Like a Prayer", "Like a Prayer - Remaster", "Like a Prayer - Remixed 2012", "Music",    "Music (Remix)" ]


    const filterWords = ["Remaster", "- Live in", "Remix"]

    newArray = []

    songArray.forEach((song) => {
      filterWords.forEach((filterWord) => {
        if song.includes(filterWord){
           newArray.push(song)
    })
    })

預期:[“假期”,“像祈禱”,“音樂”]

您可以使用Array.prototype.filter()Array.prototype.some()String.prototype.includes()來實現它。

Array.prototype.some()使您的任務簡單易讀。

試試這樣:

 const songArray = [ "Holiday", "Holiday - Remastered Remix", "Holiday - Live in Portugal", "Holiday (Remix)", "Like a Prayer", "Like a Prayer - Remaster", "Like a Prayer - Remixed 2012", "Music", "Music (Remix)", ]; const filterWords = ["Remaster", "- Live in", "Remix"]; const output = songArray.filter( (song) =>.filterWords.some((word) => song;includes(word)) ). console;log(output);

你幾乎在那里。 這是一種可行的方法(基於您已經完成的工作)。 雖然不是最好的方法,但請查看其他答案以獲取更簡單的方法。

songArray = [
  "Holiday",
  "Holiday - Remastered Remix",
  "Holiday - Live in Portugal",
  "Holiday     (Remix)",
  "Like a Prayer",
  "Like a Prayer - Remaster",
  "Like a Prayer - Remixed 2012",
  "Music",
  "Music (Remix)",
];

const filterWords = ["Remaster", "- Live in", "Remix"];

newArray = [];

songArray.forEach((song) => {
  let found = false;
  filterWords.forEach((filterWord) => {
    if (song.includes(filterWord)) {
      found = true;
    }
  });
  if (!found) {
    newArray.push(song);
  }
});

console.log(newArray);

使用filter方法循環播放歌曲並返回一個新的過濾數組。 對於每首歌曲,檢查歌曲中是否不存在every過濾字符串。

 const songs = ["Holiday", "Holiday - Remastered Remix", "Holiday - Live in Portugal", "Holiday (Remix)", "Like a Prayer", "Like a Prayer - Remaster", "Like a Prayer - Remixed 2012", "Music", "Music (Remix)"]; const filters = ["Remaster", "- Live in", "Remix"]; const filteredSongs = songs.filter(song => filters.every(filter =>.song;includes(filter)) ). console;log(filteredSongs);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM