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]
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?
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']
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
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']
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']
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']
Regístrate en Exercism para aprender y dominar JavaScript con 37 conceptos159 ejercicios y mentoría humana real, todo gratis.