Executando verificação de segurança...
1

Sobre modelagem de posições em listas

Quais as formas que vocês conhecem de ordenar posições de entidades em listas? Por exemplo, playlists de músicas.
O que me veio na cabeça e o que achei pesquisando foi criar uma entidade intermediária pra guardar o valor da posição, mas será que há uma forma mais enxuta de fazer isso?

Carregando publicação patrocinada...
1

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']

// Exemplo simples sem considerar performance
listaComPosicoes
  .forEach(id => console.log(endidades.find(e => e.id === id)))

/*
{
  "id": "m2",
  "name": "Musica 2"
} 
{
  "id": "m1",
  "name": "Musica 1"
} 
{
  "id": "m3",
  "name": "Musica 3"
} 
{
  "id": "v2",
  "name": "Video 2"
} 
*/
  • 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))

/*
{
  "id": "m2",
  "name": "Musica 2",
  "position": 0
} 
{
  "id": "m1",
  "name": "Musica 1",
  "position": 1
} 
{
  "id": "m3",
  "name": "Musica 3",
  "position": 2
} 
{
  "id": "v2",
  "name": "Video 2",
  "position": 3
} 

*/
  • 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.

1