У меня есть массив song
элементов, который содержит массив artists
, связанный с песней
Я хотел бы сгруппировать songs
по artists
песни. Учитывая следующий набор данных, я бы хотел, чтобы данные были отформатированы следующим образом:
Критерии:
- Песня должна быть частью только одной группы, поэтому, если песня несколько исполнителей, он должен храниться в группе под названием
groupedArtists: "1,2"
(может быть лучше соглашение об именах) - Не имеет значения, в каком порядке перечислены исполнители. Если в песне есть исполнители
1
и 2
, а в другой песне есть исполнители 2
и 1
, тогда оба должны быть сгруппированы под groupedArtists: "1,2"
var ungroupedData = [
{
trackId: 1,
title: 'track 1',
artists: [
{
artistId: 1,
name: 'artist 1',
},
{
artistId: 2,
name: 'artist 2',
},
],
},
{
trackId: 2,
title: 'track 2',
artists: [
{
artistId: 1,
name: 'artist 1',
},
],
},
{
trackId: 3,
title: 'track 3',
artists: [
{
artistId: 2,
name: 'artist 2',
},
{
artistId: 3,
name: 'artist 3',
},
],
},
{
trackId: 4,
title: 'track 4',
artists: [
{
artistId: 2,
name: 'artist 2',
},
{
artistId: 1,
name: 'artist 1',
},
],
},
]
Ниже приведен желаемый формат моих данных. Опять же, я хочу sh, чтобы не добавлять песню в группу, если она просто содержит исполнителя, она должна соответствовать каждому артисту, который будет добавлен в группу (например, если есть песня только с artist 1
, ее нельзя добавлять в группу под названием groupedArtists: "1,2"
. Следовательно, будет создана группа под названием groupedArtists: "1"
, если она еще не была создана.
var groupedData = [
{
artistGroup: '1,2', <-- definitely open to group naming suggestions
songs: [
{
trackId: 1, <-- this track has artists 1 & 2
title: 'track 1',
artists: [
{
artistId: 1,
name: 'artist 1',
},
{
artistId: 2,
name: 'artist 2',
},
],
},
{
trackId: 4, <-- this track has artists 2 & 1 but they are still grouped together
title: 'track 4',
artists: [
{
artistId: 2,
name: 'artist 2',
},
{
artistId: 1,
name: 'artist 1',
},
],
},
],
},
{
artistGroup: '1',
songs: [
{
trackId: 2, <-- track 2 only has artist 1 so `artistGroup: "1"` is created.
title: 'track 2',
artists: [
{
artistId: 1,
name: 'artist 1',
},
],
},
],
},
{
artistGroup: '2,3',
songs: [
{
trackId: 3, <-- this song has artists 2 and 3 so we create `artistGroup: "2,3"`
title: 'track 3',
artists: [
{
artistId: 2,
name: 'artist 2',
},
{
artistId: 3,
name: 'artist 3',
},
],
},
]
}
]