freeCodeCamp Challenge Guide: Record Collection

Record Collection


Problem Explanation

For the given id parameter, which is associated to the object:
* If the value parameter isn’t an empty string, update (or set) the value parameter for the prop parameter.
* If the prop parameter is equal to "tracks" and the value isn’t an empty string, push the value onto the end of the tracks array.
* If value is an empty string, delete that prop from the object.

  • Finally, return object.

Hints

Hint 1

Use an if...else if chain to check the needed steps.

Hint 2

To access the value of a key in this object, you will use object[id][prop].

Hint 3

You can’t push to an array that doesn’t exist. Use hasOwnProperty to check firt.


Solutions

Solution 1 (Click to Show/Hide)
// Setup
var collection = {
  2548: {
    albumTitle: 'Slippery When Wet',
    artist: 'Bon Jovi',
    tracks: ['Let It Rock', 'You Give Love a Bad Name']
  },
  2468: {
    albumTitle: '1999',
    artist: 'Prince',
    tracks: ['1999', 'Little Red Corvette']
  },
  1245: {
    artist: 'Robert Palmer',
    tracks: []
  },
  5439: {
    albumTitle: 'ABBA Gold'
  }
};

// Only change code below this line
function updateRecords(object, id, prop, value) {
  if (prop !== 'tracks' && value !== "") {
    object[id][prop] = value;
  } else if (prop === "tracks" && object[id].hasOwnProperty("tracks") === false) {
    object[id][prop] = [value];
  } else if (prop === "tracks" && value !== "") {
    object[id][prop].push(value);
  } else if (value === "") {
    delete object[id][prop];
  }
  return object;
}

updateRecords(collection, 5439, 'artist', 'ABBA');
Solution 2 (Click to Show/Hide)
var collection = {
  2548: {
    albumTitle: 'Slippery When Wet',
    artist: 'Bon Jovi',
    tracks: ['Let It Rock', 'You Give Love a Bad Name']
  },
  2468: {
    albumTitle: '1999',
    artist: 'Prince',
    tracks: ['1999', 'Little Red Corvette']
  },
  1245: {
    artist: 'Robert Palmer',
    tracks: []
  },
  5439: {
    albumTitle: 'ABBA Gold'
  }
};

// Only change code below this line
function updateRecords(object, id, prop, value) {
  if (value === '') delete object[id][prop];
  else if (prop === 'tracks') {
    object[id][prop] = object[id][prop] || []; // this is called shortcircuit evaluation, see below for explanation
    object[id][prop].push(value);
  } else {
    object[id][prop] = value;
  }

  return object;
}

Code Explanation

  • First checks if value is a blank string. If so, then the key (prop) is removed from the object.
  • If that first check doesn’t pass, it next checks if prop is equal to tracks. The tracks array is initialized if it does not exist, and then value is pushed into the tracks array. (This step uses shortcircuit evaluation)
  • If both these checks fail (meaning value is not an empty string and prop is not tracks), then either a new key (prop) and value (value) are added to the object, or an existing key is updated if the prop already exists.

Example Run

  • updateRecords(5439, "artist", "ABBA"); runs.
  • value is not a blank string, so the first condition of the else if statement fails.
  • prop is equal to “artist”, not “tracks”, so the second condition of the else if statement fails.
  • in the ‘else’ clause, artist: "ABBA" is added to the 5439 id.

Relevant Links

98 Likes