Tracks
/
JavaScript
JavaScript
/
Ejercicios
/
La lista de reproducción de Ozan
La lista de reproducción de Ozan

La lista de reproducción de Ozan

Ejercicio de aprendizaje

Introducción

En JavaScript, un conjunto es una estructura similar a una lista que contiene valores únicos, que pueden ser primitivos o referencias a objetos. A diferencia de un array, no se puede acceder a los elementos de un conjunto por índice.

Un valor no se puede agregar a un conjunto si es estrictamente igual a alguno de los elementos del conjunto.

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

Puedes proporcionar un array como argumento al crear un conjunto, y los valores del array se convertirán en los valores del conjunto, además de eliminar los 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 convertir un conjunto en un array, puedes usar Array.from(), que convierte en un array cualquier iterable, como un conjunto o un mapa.

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]

Instrucciones

Ozan está armando una lista de reproducción para un próximo viaje por carretera. No quiere escuchar la misma pista más de una vez, pero la lista se ha vuelto tan larga que ya le cuesta recordar cuáles pistas ya agregó.

La API del reproductor de música de Ozan solo sabe trabajar con arrays, así que intenta escribir algo de código que use Array.indexOf() para comprobar si una pista ya está presente antes de agregarla a la lista de reproducción. Por desgracia, su programa tarda demasiado en ejecutarse. ¡Necesita tu ayuda!

Al acudir en ayuda de Ozan, te asombras al descubrir que su lista de reproducción contiene medio millón de pistas. ¿Quizás conozcas otra estructura de datos que te permita manipular la lista de reproducción de forma más eficiente?

1. Eliminar las pistas duplicadas

Implementa la función removeDuplicates, que recibe una lista de reproducción como parámetro y devuelve una nueva lista de reproducción donde todas las pistas sean ú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. Comprobar si ya se agregó una pista

Implementa la función hasTrack, que recibe una lista de reproducción y una pista como parámetros y devuelve un boolean que indica si la lista de reproducción contiene la pista.

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. Agregar una pista

Implementa la función addTrack, que recibe una lista de reproducción y una pista como parámetros y devuelve una nueva lista de reproducción que incluye la pista.

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. Eliminar una pista

Implementa la función deleteTrack, que recibe una lista de reproducción y una pista como parámetros y devuelve una nueva lista de reproducción que no incluye la pista.

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 los artistas únicos

Implementa la función listArtists, que recibe una lista de reproducción como parámetro y devuelve la lista de artistas únicos en la lista de reproducción. Ten en cuenta que los nombres de las pistas tienen el formato <SONG> - <ARTIST>.

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

listArtists(playlist);
//=> ['Portishead', 'Devendra Banhart']
Editar en GitHub El enlace se abre en una ventana o una pestaña nuevas
JavaScript Exercism

¿Todo listo para empezar La lista de reproducción de Ozan?

Regístrate en Exercism para aprender y dominar JavaScript con 37 conceptos159 ejercicios y mentoría humana real, todo gratis.