This unit, we'll be exploring objects by creating an application to help maintain a record collection. We will be creating objects using object literal syntax.
- Objects
- HTML & CSS
Update the 3-music-collection.js file to do the following:
While working through the features below, make sure to commit after you complete a task! Your commit message should reflect what you added or changed since the previous commit.
-
Create an empty array named
myCollection. -
Create a function named
addToCollection. It should have this basic structure:function addToCollection(collection, title, artist, yearPublished) { // your code here... }
- This function should:
- Take in a
collectionparameter. (This allows the function to be reused to add an album to any array of album objects). - Take in the album's
title,artist,yearPublishedas parameters. - Create a new object having the above properties.
- NOTE: Your object's properties must have
title,artist, andyearPublishedin order for this assignment's automated tests to work correctly!
- NOTE: Your object's properties must have
- Add the new object to the end of the
collectionarray. returnthe newly created object.
- Take in a
- This function should:
-
Use and Test the
addToCollectionfunction:- Add 6 albums to the
myCollectionarray. Aim to have a mix of both same and different artists and published years. (Feel free to share your musical interests, or make stuff up. Totally fine either way). console.logeach album as added using the function's returned value.- After all are added, console.log the
myCollectionarray.
- Add 6 albums to the
-
Create a function named
showCollection. This function should:- Take in a
collectionparameter. (This allows it to be reused to show any array of album objects). - Loop through the
collectionandconsole.logeach album's information formatted within a single string, like:TITLE by ARTIST, published in YEARPUBLISHED.
- Take in a
-
Use and test the
showCollectionfunction. -
Create a function named
findByArtist. This function should:- Take in a
collectionparameter. Remember, we want to be able to search any collection! - Take in an
artist(string) parameter. - Create an empty array to hold any matching results, if any.
- Loop through the
collectionand add any album objects with a matching artist to the array. - Return the array with the matching results. (If no results are found, an empty array should be returned).
- Take in a
-
Use and test the
findByArtistfunction.- Make sure to test with an artist you know is in the collection, as well as an artist you know is not in your collection.
- Check that for artists with multiple matches, all are returned.
When testing your functions, write all tests in the JavaScript file!
-
Create a function called
searchthat will allow for searching byartistandyearPublished. This function should:- Take in a
collectionparameter. - Take in a
searchCriteriaparameter. Create your solution based on a search object that has these properties:
{ artist: 'Ray Charles', yearPublished: 1957 }
- The returned output from
searchshould meet these requirements:- Return a new array of all items in the
collectionmatching all of the search criteria. - If no results are found, return an empty array.
- If there is no search object, an empty search object, or missing
artist/yearPublisheddata provided as input,returnall albums from thecollectionbeing searched.
- Return a new array of all items in the
- Take in a
NOTE: The following stretch goals do not have tests associated with them. This means it's even more important to use your own console.log skills to verify that your code behaves as you expect.
-
Add an array of
tracksto each of your album objects. Each track should have anameandduration. You will need to update the functions to support this new property:- Update the
addToCollectionfunction to also take an input parameter for the array of tracks. - Update the
showCollectionfunction to display the list of tracks for each album with its name and duration.
TITLE by ARTIST, published in YEARPUBLISHED: 1. NAME: DURATION 2. NAME: DURATION 3. NAME: DURATION TITLE by ARTIST, published in YEARPUBLISHED: 1. NAME: DURATION 2. NAME: DURATION - Update the
-
Update
searchto allow an optionaltrackNamesearch criteria.- If the search object has a
trackNameproperty, only search for that, ignoring anyartistoryearPublishedproperties.
- If the search object has a
Make sure to test all your code!
Check in your repo, then turn in your work via the Prime Academy Assignment Application in the Prime Portal, as usual and don't hesitate to hit up the Slack channel as needed!