Vejo várias maneiras de abordar isso. Provavelmente, eu seguiria uma dessas opções. Vamos trabalhar com o caso genérico em que queremos uma playlist com as músicas M2, M1, M3 e o vídeo V2:
- Criar uma lista ordenada que guarda uma referência para cada entidade.
const endidades = [
{id: 'm1', name: 'Musica 1'},
{id: 'm2', name: 'Musica 2'},
{id: 'm3', name: 'Musica 3'},
{id: 'v2', name: 'Video 2'}]
const listaComPosicoes = ['m2', 'm1', 'm3', 'v2']
listaComPosicoes
.forEach(id => console.log(endidades.find(e => e.id === id)))
- Salvar a posição da entidade em si.
const endidadesComPosicao = [
{id: 'm1', name: 'Musica 1', position: 1},
{id: 'm2', name: 'Musica 2', position: 0},
{id: 'm3', name: 'Musica 3', position: 2},
{id: 'v2', name: 'Video 2', position: 3},]
endidadesComPosicao
.sort((a,b) => a.position - b.position)
.forEach(x => console.log(x))
- Salvar em uma entidade intermediária, como você sugeriu.
Qual é o melhor?
Aquele que melhor se ajusta ao código que você já tem em funcionamento. Um benchmark de desempenho pode ser útil caso o desempenho seja crucial na decisão.