Στη JavaScript, ένα σύνολο είναι μια δομή σαν λίστα που περιέχει μοναδικές τιμές, οι οποίες μπορούν να είναι πρωτογενείς τιμές ή/και αναφορές σε αντικείμενα. Σε αντίθεση με έναν πίνακα, δεν μπορείς να προσπελάσεις τα στοιχεία ενός συνόλου με βάση τη θέση τους.
Μια τιμή δεν μπορεί να προστεθεί σε ένα σύνολο αν είναι αυστηρά ίση με οποιοδήποτε από τα στοιχεία του συνόλου.
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
Μπορείς να δώσεις έναν πίνακα ως όρισμα όταν δημιουργείς ένα σύνολο, και οι τιμές του πίνακα θα γίνουν οι τιμές του συνόλου, αφαιρώντας παράλληλα και τις διπλότυπες τιμές.
const array = [1, 5, 4, 1];
const set = new Set(array); // the set's values become [1, 5, 4]
console.log(set.size);
//=> 3
Για να μετατρέψεις ένα σύνολο σε πίνακα, μπορείς να χρησιμοποιήσεις τη Array.from(), η οποία μετατρέπει μια δομή που μπορεί να διατρέχεται με επανάληψη, όπως ένα σύνολο ή έναν χάρτη, σε πίνακα.
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 ετοιμάζει μια λίστα αναπαραγωγής για ένα επερχόμενο ταξίδι με αυτοκίνητο. Δεν θέλει να ακούσει το ίδιο κομμάτι περισσότερο από μία φορά, αλλά η λίστα έχει γίνει τόσο μεγάλη που δυσκολεύεται να θυμηθεί ποια κομμάτια έχει ήδη προσθέσει.
Το API του music player του Ozan ξέρει να δουλεύει μόνο με πίνακες, οπότε προσπαθεί να γράψει κάποιον κώδικα που χρησιμοποιεί το Array.indexOf() για να ελέγξει αν υπάρχει ένα κομμάτι πριν το προσθέσει στη λίστα αναπαραγωγής. Δυστυχώς, το πρόγραμμά του αργεί υπερβολικά να εκτελεστεί. Χρειάζεται τη βοήθειά σου!
Σπεύδοντας να βοηθήσεις τον Ozan, εκπλήσσεσαι όταν ανακαλύπτεις ότι η λίστα του περιέχει μισό εκατομμύριο κομμάτια. Μήπως ξέρεις κάποια διαφορετική δομή δεδομένων που θα σου επιτρέψει να χειριστείς τη λίστα πιο αποδοτικά;
Υλοποίησε τη συνάρτηση removeDuplicates, η οποία παίρνει μια λίστα αναπαραγωγής ως παράμετρο και επιστρέφει μια νέα λίστα όπου όλα τα κομμάτια είναι μοναδικά.
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']
Υλοποίησε τη συνάρτηση hasTrack, η οποία παίρνει μια λίστα αναπαραγωγής και ένα κομμάτι ως παραμέτρους και επιστρέφει μια Boolean (λογική τιμή) που δείχνει αν η λίστα περιέχει το κομμάτι.
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
Υλοποίησε τη συνάρτηση addTrack, η οποία παίρνει μια λίστα αναπαραγωγής και ένα κομμάτι ως παραμέτρους και επιστρέφει μια νέα λίστα που περιλαμβάνει το κομμάτι.
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']
Υλοποίησε τη συνάρτηση deleteTrack, η οποία παίρνει μια λίστα αναπαραγωγής και ένα κομμάτι ως παραμέτρους και επιστρέφει μια νέα λίστα που δεν περιλαμβάνει το κομμάτι.
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']
Υλοποίησε τη συνάρτηση listArtists, η οποία παίρνει μια λίστα αναπαραγωγής ως παράμετρο και επιστρέφει τη λίστα με τους μοναδικούς καλλιτέχνες της λίστας αναπαραγωγής. Σημείωσε ότι τα ονόματα των κομματιών έχουν τη μορφή <SONG> - <ARTIST>.
const playlist = [
'All Mine - Portishead',
'Sight to Behold - Devendra Banhart',
'Sour Times - Portishead',
];
listArtists(playlist);
//=> ['Portishead', 'Devendra Banhart']
Γράψου στο Exercism για να μάθεις και να κατακτήσεις JavaScript με 37 έννοιες159 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.