Rutas
/
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 set es una estructura similar a un array que contiene valores únicos, los cuales pueden ser primitivos y/o referencias a objetos. A diferencia de un array, no se puede acceder a los elementos de un set por índice.

Un valor no se puede añadir a un set si es estrictamente igual a alguno de los elementos del 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

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

Instrucciones

Ozan está preparando una lista de reproducción para un próximo viaje por carretera. No quiere escuchar la misma canción más de una vez, pero la lista de reproducción se ha vuelto tan larga que le cuesta recordar qué canciones ya se han añadido.

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 canción está presente antes de añadirla 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 canciones. ¿Quizá conoces otra estructura de datos que te permita manipular la lista de reproducción de forma más eficiente?

1. Eliminar las canciones duplicadas

Implementa la función removeDuplicates, que toma una lista de reproducción como parámetro y devuelve una nueva lista de reproducción en la que todas las canciones son ú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 una canción ya se ha añadido

Implementa la función hasTrack, que toma una lista de reproducción y una canción como parámetros y devuelve un valor booleano que indica si la lista de reproducción contiene la canción.

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. Añadir una canción

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

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 canción

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

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 toma una lista de reproducción como parámetro y devuelve la lista de artistas únicos de la lista de reproducción. Ten en cuenta que los nombres de las canciones 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 pestaña nueva
JavaScript Exercism

¿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.