id
(like 2548
), a property prop
(like "artist"
or "tracks"
), and a value
(like "Addicted to Love"
) to modify the data in this collection.
-If prop
isn't "tracks"
and value
isn't empty (""
), update or set the value
for that record album's property.
-Your function must always return the entire collection object.
-There are several rules for handling incomplete data:
-If prop
is "tracks"
but the album doesn't have a "tracks"
property, create an empty array before adding the new value to the album's corresponding property.
-If prop
is "tracks"
and value
isn't empty (""
), push the value
onto the end of the album's existing tracks
array.
-If value
is empty (""
), delete the given prop
property from the album.
-Hintsbracket notation
when accessing object properties with variables.
-The `push` array method will be helpful here. Check out our Manipulate Arrays With push() challenge to review how it works.
-You may refer back to Manipulating Complex Objects Introducing JavaScript Object Notation (JSON) for a refresher.
+
+You are given a JSON object representing a part of your musical album collection. Each album has a unique id number as its key and several other properties. Not all albums have complete information.
+
+You start with an `updateRecords` function that takes an object like `collection`, an `id`, a `prop` (like `artist` or `tracks`), and a `value`. Complete the function using the rules below to modify the object passed to the function.
+
+- Your function must always return the entire object.
+- If `prop` isn't `tracks` and `value` isn't an empty string, update or set that album's `prop` to `value`.
+- If `prop` is `tracks` but the album doesn't have a `tracks` property, create an empty array and add `value` to it.
+- If `prop` is `tracks` and `value` isn't an empty string, add `value` to the end of the album's existing `tracks` array.
+- If `value` is an empty string, delete the given `prop` property from the album.
+
+**Note:** A copy of the `collection` object is used for the tests.
collection
object's initialization
- testString: 'assert(code.match(/var collection = {\s*2548: {\s*album: "Slippery When Wet",\s*artist: "Bon Jovi",\s*tracks: \[\s*"Let It Rock",\s*"You Give Love a Bad Name"\s*\]\s*},\s*2468: {\s*album: "1999",\s*artist: "Prince",\s*tracks: \[\s*"1999",\s*"Little Red Corvette"\s*\]\s*},\s*1245: {\s*artist: "Robert Palmer",\s*tracks: \[ \]\s*},\s*5439: {\s*album: "ABBA Gold"\s*}\s*};/g));'
- - text: After updateRecords(5439, "artist", "ABBA")
, artist
should be "ABBA"
- testString: assert(updateRecords(5439, "artist", "ABBA")[5439]["artist"] === "ABBA");
- - text: After updateRecords(5439, "tracks", "Take a Chance on Me")
, tracks
should have "Take a Chance on Me"
as the last element.
- testString: assert(updateRecords(5439, "tracks", "Take a Chance on Me")[5439]["tracks"].pop() === "Take a Chance on Me");
- - text: After updateRecords(2548, "artist", "")
, artist
should not be set
- testString: updateRecords(2548, "artist", ""); assert(!collection[2548].hasOwnProperty("artist"));
- - text: After updateRecords(1245, "tracks", "Addicted to Love")
, tracks
should have "Addicted to Love"
as the last element.
- testString: assert(updateRecords(1245, "tracks", "Addicted to Love")[1245]["tracks"].pop() === "Addicted to Love");
- - text: After updateRecords(2468, "tracks", "Free")
, tracks
should have "1999"
as the first element.
- testString: assert(updateRecords(2468, "tracks", "Free")[2468]["tracks"][0] === "1999");
- - text: After updateRecords(2548, "tracks", "")
, tracks
should not be set
- testString: updateRecords(2548, "tracks", ""); assert(!collection[2548].hasOwnProperty("tracks"));
- - text: After updateRecords(1245, "album", "Riptide")
, album
should be "Riptide"
- testString: assert(updateRecords(1245, "album", "Riptide")[1245]["album"] === "Riptide");
-
+ - text: After updateRecords(collection, 5439, "artist", "ABBA")
, artist
should be ABBA
+ testString: assert(updateRecords(_recordCollection, 5439, "artist", "ABBA")[5439]["artist"] === "ABBA");
+ - text: After updateRecords(collection, 5439, "tracks", "Take a Chance on Me")
, tracks
should have Take a Chance on Me
as the last element.
+ testString: assert(updateRecords(_recordCollection, 5439, "tracks", "Take a Chance on Me")[5439]["tracks"].pop() === "Take a Chance on Me");
+ - text: After updateRecords(collection, 2548, "artist", "")
, artist
should not be set
+ testString: updateRecords(_recordCollection, 2548, "artist", ""); assert(!_recordCollection[2548].hasOwnProperty("artist"));
+ - text: After updateRecords(collection, 1245, "tracks", "Addicted to Love")
, tracks
should have Addicted to Love
as the last element.
+ testString: assert(updateRecords(_recordCollection, 1245, "tracks", "Addicted to Love")[1245]["tracks"].pop() === "Addicted to Love");
+ - text: After updateRecords(collection, 2468, "tracks", "Free")
, tracks
should have 1999
as the first element.
+ testString: assert(updateRecords(_recordCollection, 2468, "tracks", "Free")[2468]["tracks"][0] === "1999");
+ - text: After updateRecords(collection, 2548, "tracks", "")
, tracks
should not be set
+ testString: updateRecords(_recordCollection, 2548, "tracks", ""); assert(!_recordCollection[2548].hasOwnProperty("tracks"));
+ - text: After updateRecords(collection, 1245, "albumTitle", "Riptide")
, albumTitle
should be Riptide
+ testString: assert(updateRecords(_recordCollection, 1245, "albumTitle", "Riptide")[1245]["albumTitle"] === "Riptide");
```