En JavaScript, un ensemble est une structure qui ressemble à une liste et qui contient des valeurs uniques, lesquelles peuvent être des primitives et/ou des références vers des objets. Contrairement à un tableau, on ne peut pas accéder aux éléments d'un ensemble par leur indice.
On ne peut pas ajouter une valeur à un ensemble si elle est strictement égale à l'un des éléments de cet ensemble.
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
Tu peux fournir un tableau en argument au moment de créer un ensemble : les valeurs de ce tableau deviennent alors les valeurs de l'ensemble, ce qui supprime aussi les doublons.
const array = [1, 5, 4, 1];
const set = new Set(array); // the set's values become [1, 5, 4]
console.log(set.size);
//=> 3
Pour convertir un ensemble en tableau, tu peux utiliser Array.from(), qui convertit un itérable, comme un ensemble ou une Map, en tableau.
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 prépare une playlist pour un prochain voyage en voiture. Il ne veut pas écouter deux fois le même morceau, mais la playlist est devenue si longue qu'il a du mal à se rappeler quels morceaux ont déjà été ajoutés.
L'API du lecteur de musique d'Ozan ne sait travailler qu'avec des tableaux, alors il essaie d'écrire du code qui utilise Array.indexOf() pour vérifier la présence d'un morceau avant de l'ajouter à la playlist. Malheureusement, son programme met beaucoup trop de temps à s'exécuter. Il a besoin de ton aide !
Venu à la rescousse d'Ozan, tu découvres avec stupeur que sa playlist contient un demi-million de morceaux. Tu connais peut-être une autre structure de données qui te permettrait de manipuler la playlist plus efficacement ?
Implémente la fonction removeDuplicates, qui prend une playlist en paramètre et renvoie une nouvelle playlist où tous les morceaux sont uniques.
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']
Implémente la fonction hasTrack, qui prend une playlist et un morceau en paramètres et renvoie un booléen qui indique si la playlist contient le morceau.
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
Implémente la fonction addTrack, qui prend une playlist et un morceau en paramètres et renvoie une nouvelle playlist qui inclut le morceau.
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']
Implémente la fonction deleteTrack, qui prend une playlist et un morceau en paramètres et renvoie une nouvelle playlist qui ne contient pas ce morceau.
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']
Implémente la fonction listArtists, qui prend une playlist en paramètre et renvoie la liste des artistes uniques de la playlist. Note que les noms des morceaux sont au format <SONG> - <ARTIST>.
const playlist = [
'All Mine - Portishead',
'Sight to Behold - Devendra Banhart',
'Sour Times - Portishead',
];
listArtists(playlist);
//=> ['Portishead', 'Devendra Banhart']
Inscris-toi sur Exercism pour apprendre et maîtriser JavaScript avec 37 concepts159 exercices, et un vrai mentorat humain, le tout gratuitement.