Διαδρομές
/
JavaScript
JavaScript
/
Ασκήσεις
/
Η Λίστα Αναπαραγωγής του Ozan
Η Λίστα Αναπαραγωγής του Ozan

Η Λίστα Αναπαραγωγής του Ozan

Άσκηση εκμάθησης

Εισαγωγή

Στη 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, εκπλήσσεσαι όταν ανακαλύπτεις ότι η λίστα του περιέχει μισό εκατομμύριο κομμάτια. Μήπως ξέρεις κάποια διαφορετική δομή δεδομένων που θα σου επιτρέψει να χειριστείς τη λίστα πιο αποδοτικά;

1. Αφαίρεσε τα διπλότυπα κομμάτια

Υλοποίησε τη συνάρτηση 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']

2. Έλεγξε αν ένα κομμάτι έχει ήδη προστεθεί

Υλοποίησε τη συνάρτηση 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

3. Πρόσθεσε ένα κομμάτι

Υλοποίησε τη συνάρτηση 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']

4. Διάγραψε ένα κομμάτι

Υλοποίησε τη συνάρτηση 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']

5. Κάνε λίστα με τους μοναδικούς καλλιτέχνες

Υλοποίησε τη συνάρτηση listArtists, η οποία παίρνει μια λίστα αναπαραγωγής ως παράμετρο και επιστρέφει τη λίστα με τους μοναδικούς καλλιτέχνες της λίστας αναπαραγωγής. Σημείωσε ότι τα ονόματα των κομματιών έχουν τη μορφή <SONG> - <ARTIST>.

const playlist = [
  'All Mine - Portishead',
  'Sight to Behold - Devendra Banhart',
  'Sour Times - Portishead',
];

listArtists(playlist);
//=> ['Portishead', 'Devendra Banhart']
Επεξεργασία μέσω GitHub Ο σύνδεσμος ανοίγει σε νέο παράθυρο ή καρτέλα
JavaScript Exercism

Έτοιμος να ξεκινήσεις την άσκηση Η Λίστα Αναπαραγωγής του Ozan;

Γράψου στο Exercism για να μάθεις και να κατακτήσεις JavaScript με 37 έννοιες159 ασκήσεις και πραγματική καθοδήγηση από ανθρώπους, όλα δωρεάν.