DEV Community

loading...

Challenge Record Collection

rthefounding profile image Randy Rivera ・2 min read

Record Collection:

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.

Here we have 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.

  • The 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.
  • Solve:
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 below this line.
function updateRecords(object, id, prop, value) {
  return object;
}

updateRecords(collection, 5439, 'artist', 'ABBA');
Enter fullscreen mode Exit fullscreen mode
  • Answer:
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'
  }
};

var collectionCopy = JSON.parse(JSON.stringify(collection));

// 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;
}

console.log(JSON.stringify(updateRecords(collection, 5439, "tracks", "Take a Chance on Me"))); will display
{"1245":{"artist":"Robert Palmer","tracks":[]},"2468":{"albumTitle":"1999","artist":"Prince","tracks":["1999","Little Red Corvette"]},"2548":{"albumTitle":"Slippery When Wet","artist":"Bon Jovi","tracks":["Let It Rock","You Give Love a Bad Name"]},"5439":{"albumTitle":"ABBA Gold","tracks":["Take a Chance on Me"]}}
Enter fullscreen mode Exit fullscreen mode

Discussion (1)

Some comments have been hidden by the post's author - find out more

Forem Open with the Forem app