A JavaScriptben a halmaz egy listaszerű szerkezet, amely egyedi értékeket tartalmaz; ezek az értékek primitívek és/vagy objektumhivatkozások lehetnek. A tömbbel ellentétben egy halmaz elemeihez nem férhetsz hozzá index alapján.
Nem adhatsz hozzá a halmazhoz olyan értéket, amely szigorúan egyenlő a halmaz bármelyik elemével.
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
Egy halmaz létrehozásakor argumentumként megadhatsz egy tömböt, és ilyenkor a tömb értékei lesznek a halmaz értékei, az ismétlődő értékeket pedig eltávolítja.
const array = [1, 5, 4, 1];
const set = new Set(array); // the set's values become [1, 5, 4]
console.log(set.size);
//=> 3
Ha egy halmazt tömbbé szeretnél alakítani, használhatod az Array.from() metódust, amely egy iterálható objektumot, például egy halmazt vagy egy mapet tömbbé alakít.
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 lejátszási listát állít össze egy közelgő kirándulásra. Nem szeretné ugyanazt a számot kétszer meghallgatni, a lista viszont olyan hosszúra nyúlt, hogy már alig emlékszik rá, mely számok kerültek már rá.
Ozan zenelejátszójának API-ja csak tömbökkel tud dolgozni, ezért megpróbál olyan kódot írni, amely a Array.indexOf() metódussal ellenőrzi, hogy egy szám szerepel-e már a listán, mielőtt hozzáadná. Sajnos a programja túl sokáig fut. Szüksége van a segítségedre!
Amikor Ozan segítségére sietsz, döbbenten látod, hogy a listáján félmillió szám van. Talán ismersz egy másik adatszerkezetet, amellyel hatékonyabban kezelheted a lejátszási listát?
Valósítsd meg a removeDuplicates függvényt, amely egy lejátszási listát vesz át paraméterként, és egy új lejátszási listát ad vissza, amelyben minden szám egyedi.
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']
Valósítsd meg a hasTrack függvényt, amely egy lejátszási listát és egy számot vesz át paraméterként, és egy Boolean értéket ad vissza, amely megmutatja, hogy a lejátszási lista tartalmazza-e a számot.
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
Valósítsd meg az addTrack függvényt, amely egy lejátszási listát és egy számot vesz át paraméterként, és egy új lejátszási listát ad vissza, amely tartalmazza a számot.
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']
Valósítsd meg a deleteTrack függvényt, amely egy lejátszási listát és egy számot vesz át paraméterként, és egy új lejátszási listát ad vissza, amely nem tartalmazza a számot.
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']
Valósítsd meg a listArtists függvényt, amely egy lejátszási listát vesz át paraméterként, és visszaadja a lejátszási listán szereplő egyedi előadók listáját. Figyeld meg, hogy a számok nevei a következő formátumban vannak: <SONG> - <ARTIST>.
const playlist = [
'All Mine - Portishead',
'Sight to Behold - Devendra Banhart',
'Sour Times - Portishead',
];
listArtists(playlist);
//=> ['Portishead', 'Devendra Banhart']
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) JavaScript nyelvet 37 fogalom159 feladat segítségével, valódi emberi mentorálással, mindez ingyen.