Tracks
/
JavaScript
JavaScript
/
Übungen
/
Ozans Playlist
Ozans Playlist

Ozans Playlist

Lernübung

Einführung

In JavaScript ist ein Set eine listenähnliche Struktur, die eindeutige Werte enthält, die primitive Werte und/oder Objektreferenzen sein können. Anders als bei einem Array kannst du auf die Elemente eines Sets nicht über einen Index zugreifen.

Du kannst einem Set keinen Wert hinzufügen, der strikt gleich einem seiner Elemente ist.

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

Beim Erstellen eines Sets kannst du ein Array als Argument übergeben. Die Werte des Arrays werden dann zu den Werten des Sets, wobei doppelte Werte entfernt werden.

const array = [1, 5, 4, 1];
const set = new Set(array); // the set's values become [1, 5, 4]

console.log(set.size);
//=> 3

Um ein Set in ein Array umzuwandeln, kannst du Array.from() verwenden. Es wandelt ein iterierbares Objekt wie ein Set oder eine Map in ein Array um.

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]

Anleitung

Ozan stellt eine Playlist für einen bevorstehenden Roadtrip zusammen. Er möchte keinen Track mehr als einmal hören, doch die Playlist ist inzwischen so lang geworden, dass er Mühe hat, sich zu merken, welche Tracks schon hinzugefügt wurden.

Die API von Ozans Musikplayer kann nur mit Arrays umgehen. Also versucht er, Code zu schreiben, der Array.indexOf() verwendet, um zu prüfen, ob ein Track vorhanden ist, bevor er ihn zur Playlist hinzufügt. Leider braucht sein Programm viel zu lange, um ausgeführt zu werden. Er braucht deine Hilfe!

Du eilst Ozan zu Hilfe und stellst erstaunt fest, dass seine Playlist eine halbe Million Tracks enthält. Vielleicht kennst du eine andere Datenstruktur, mit der du die Playlist effizienter bearbeiten kannst?

1. Doppelte Tracks entfernen

Implementiere die Funktion removeDuplicates, die eine Playlist als Parameter entgegennimmt und eine neue Playlist zurückgibt, in der alle Tracks eindeutig sind.

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. Prüfen, ob ein Track bereits hinzugefügt wurde

Implementiere die Funktion hasTrack, die eine Playlist und einen Track als Parameter entgegennimmt und einen booleschen Wert zurückgibt, der angibt, ob die Playlist den Track enthält.

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. Einen Track hinzufügen

Implementiere die Funktion addTrack, die eine Playlist und einen Track als Parameter entgegennimmt und eine neue Playlist zurückgibt, die den Track enthält.

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. Einen Track löschen

Implementiere die Funktion deleteTrack, die eine Playlist und einen Track als Parameter entgegennimmt und eine neue Playlist zurückgibt, die den Track nicht enthält.

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. Eindeutige Künstler auflisten

Implementiere die Funktion listArtists, die eine Playlist als Parameter entgegennimmt und die Liste der eindeutigen Künstler in der Playlist zurückgibt. Beachte, dass die Namen der Tracks das Format <SONG> - <ARTIST> haben.

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

listArtists(playlist);
//=> ['Portishead', 'Devendra Banhart']
Über GitHub bearbeiten Der Link öffnet sich in einem neuen Fenster oder Tab
JavaScript Exercism

Bereit, mit Ozans Playlist zu starten?

Melde dich bei Exercism an, um JavaScript mit 37 Konzepte159 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.