首页 > 解决方案 > 使用 .filter 在数组中搜索数组

问题描述

我想了解如何使用 .filter 方法在数组中搜索数组。我正在创建一个充满专辑对象的集合数组。在专辑对象中有一个名为tracks 的属性,它本身就是一个填充了track 对象的数组。

function addToCollection(title, artist, yearPublished, tracks) {
  const album = {
    title: title,
    artist: artist,
    yearPublished: yearPublished,
    tracks: tracks,
  }
  collection.push(album);
  return album;
} // end addToCollection

function addTrack(trackNumber, name, duration) {
    const track = {
        trackNumber: trackNumber,
        name: name,
        duration: duration
    }
    return track;
}

我正在编写一个搜索功能来返回满足搜索条件的某些专辑。以下代码行将返回一个数组,其中包含与传入参数中的 .artist 属性匹配的专辑对象。

function search(query) {
    const foundArtist = collection.filter( x => x.artist === query.artist );

我的问题是如何使用 .filter 方法对每个专辑中的曲目数组进行排序,以找到单独的曲目名称或曲目持续时间。

即使 query.trackName 存在,以下代码也找不到轨道名称。

const foundTrackName = collection.filter( x => x.tracks.name === query.trackName);

而当我指定特定曲目时,它会返回整个专辑。

const foundTrackName = collection.filter( x => x.tracks[4].name === query.trackName);

标签: javascriptarraysmethods

解决方案


你也需要迭代tracks

const foundTrackName = collection.filter(({ tracks }) =>
    tracks.some(({ name }) =>
        name === query.trackName
    )
);

推荐阅读