首页 > 解决方案 > 带有地图 JavaScript 的条件过滤数组

问题描述

我正在尝试获取与genreFilter 具有相同流派音乐ID 的新曲目数组。

因此,如果genreFilter 为12,我需要新数组具有流派音乐ID = 12 的曲目。但是流派列表是其他数组,所以我认为我也需要对其进行迭代,然后返回曲目。

我在做下一个

const list = tracks
      .map((track) =>
        track.primary_genres.music_genre_list.filter((genre) => {
          if (
            genre.music_genre &&
            genre.music_genre.music_genre_id === genreFilter
          ) {
            return track;
          }
        })
      );

但这只会返回通过过滤函数获得的流派,不会返回曲目。

标签: javascriptfilter

解决方案


由于您想要的输出是轨道数组,因此您应该.filtertracks数组上。在过滤器内部,检查s 是否.some等于:music_genre_idgenreFilter

const list = tracks.filter(
  track => track.primary_genres.music_genre_list.some(
    genre => genre.music_genre?.music_genre_id === genreFilter
  )
);

使用可选链接使事情简洁。如果您不能使用可选链接,那么它必须与您最初所做的类似:

genere => (
  genre.music_genre &&
  genre.music_genre.music_genre_id === genreFilter
)

推荐阅读