Trilhas
/
JavaScript
JavaScript
/
Exercícios
/
Playlist do Ozan
Playlist do Ozan

Playlist do Ozan

Exercício de aprendizagem

Introdução

Em JavaScript, um set é uma estrutura parecida com uma lista que contém valores únicos, que podem ser primitivos e/ou referências a objetos. Diferente de um array, os elementos de um set não podem ser acessados por índice.

Um valor não pode ser adicionado a um set se for estritamente igual a qualquer um dos elementos do set.

const set = new Set();
const object = { color: 'lime green' };
const functionallyIdenticalObject = { color: 'lime green' };

set.add(object);
set.add('wow');
set.add(77);

console.log(set.size);
//=> 3

set.add(functionallyIdenticalObject); // added because functionallyIdenticalObject is not strictly equal to object
console.log(set.size);
//=> 4

set.add(77); // not added because 77 is strictly equal to 77
console.log(set.size);
//=> 4

Você pode passar um array como argumento ao criar um set, e os valores do array se tornam os valores do set, removendo também os valores duplicados.

const array = [1, 5, 4, 1];
const set = new Set(array); // the set's values become [1, 5, 4]

console.log(set.size);
//=> 3

Para converter um set em um array, você pode usar Array.from(), que converte um iterável, como um set ou um map, em um array.

const set = new Set();

set.add(1);
set.add(2);
set.add(3);
set.add(4);

const array = Array.from(set);
console.log(array);
//=> [1, 2, 3, 4]

Instruções

Ozan está montando uma playlist para uma viagem de carro que vai fazer em breve. Ele não quer ouvir a mesma faixa mais de uma vez, mas a playlist ficou tão longa que ele está com dificuldade para lembrar quais faixas já foram adicionadas.

A API do tocador de música do Ozan só sabe trabalhar com arrays, então ele tenta escrever um código que usa Array.indexOf() para verificar se uma faixa já está na playlist antes de adicioná-la. Infelizmente, o programa dele demora demais para executar. Ele precisa da sua ajuda!

Ao socorrer Ozan, você se espanta ao descobrir que a playlist dele tem meio milhão de faixas. Talvez você conheça uma estrutura de dados diferente que permita manipular a playlist com mais eficiência?

1. Remover faixas duplicadas

Implemente a função removeDuplicates, que recebe uma playlist como parâmetro e retorna uma nova playlist em que todas as faixas são únicas.

const playlist = [
  'Court and Spark - Joni Mitchell',
  'Big Yellow Taxi - Joni Mitchell',
  'Court and Spark - Joni Mitchell',
];

removeDuplicates(playlist);
//=> ['Court and Spark - Joni Mitchell', 'Big Yellow Taxi - Joni Mitchell']

2. Verificar se uma faixa já foi adicionada

Implemente a função hasTrack, que recebe uma playlist e uma faixa como parâmetros e retorna um boolean que indica se a playlist contém a faixa.

const playlist = [
  'The Fashion Show - Grace Jones',
  'Dr. Funkenstein - Parliament',
];

hasTrack(playlist, 'Dr. Funkenstein - Parliament');
//=> true

hasTrack(playlist, 'Walking in the Rain - Grace Jones');
//=> false

3. Adicionar uma faixa

Implemente a função addTrack, que recebe uma playlist e uma faixa como parâmetros e retorna uma nova playlist que inclui a faixa.

const playlist = ['Selma - Bijelo Dugme'];

addTrack(playlist, 'Atomic Dog - George Clinton');
//=> ['Selma - Bijelo Dugme', 'Atomic Dog - George Clinton']

addTrack(playlist, 'Selma - Bijelo Dugme');
//=> ['Selma - Bijelo Dugme', 'Atomic Dog - George Clinton']

4. Excluir uma faixa

Implemente a função deleteTrack, que recebe uma playlist e uma faixa como parâmetros e retorna uma nova playlist que não inclui a faixa.

const playlist = [
  'The Treasure - Fra Lippo Lippi',
  'After the Fall - Klaus Nomi',
];

deleteTrack(playlist, 'The Treasure - Fra Lippo Lippi');
//=> ['After the Fall - Klaus Nomi']

deleteTrack(playlist, 'I Feel the Magic - Belinda Carlisle');
//=> ['After the Fall - Klaus Nomi']

5. Listar artistas únicos

Implemente a função listArtists, que recebe uma playlist como parâmetro e retorna a lista de artistas únicos da playlist. Repare que os nomes das faixas seguem o formato <SONG> - <ARTIST>.

const playlist = [
  'All Mine - Portishead',
  'Sight to Behold - Devendra Banhart',
  'Sour Times - Portishead',
];

listArtists(playlist);
//=> ['Portishead', 'Devendra Banhart']
Editar via GitHub O link abre em uma nova janela ou aba
JavaScript Exercism

Tudo pronto para começar Playlist do Ozan?

Crie sua conta no Exercism para aprender e dominar JavaScript com 37 conceitos159 exercícios e mentoria humana de verdade, tudo de graça.