Record Collection in JavaScript

I am stack at the points Record collection in JavaScript can anyone help me?:

You are given a JSON object representing a part of your musical album collection. Each album has several properties and a unique id number as its key. Not all albums have complete information.

Write a function which takes an album’s 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.
Your code so far

 
 
 // Setup
var collection = {
  2548: {
    album: "Slippery When Wet",
    artist: "Bon Jovi",
    tracks: [
      "Let It Rock",
      "You Give Love a Bad Name"
    ]
  },
  2468: {
    album: "1999",
    artist: "Prince",
    tracks: [
      "1999",
      "Little Red Corvette"
    ]
  },
  1245: {
    artist: "Robert Palmer",
    tracks: [ ]
  },
  5439: {
    album: "ABBA Gold"
  }
};

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

updateRecords(5439, "artist", "ABBA");

Hi @Mathy ,
Welcome to the freeCodeCamp forum!

So the first failing test is:

After updateRecords(5439, "tracks", "Take a Chance on Me") , tracks should have "Take a Chance on Me" as the last element.

When I checked the value of tracks on that album with console.log(collection["5439"].tracks) I got just this string:

Take a Chance on Me

But the test asks for it to be “the last element”, meaning the last element of an array. In the description it is also stated that:

If prop is "tracks" but the album doesn’t have a "tracks" property, create an empty array before adding the new value

I saw that you are assigning an array at line 35, but the value ‘Take a Chance on Me’ got already assigned online 32.

Personally I would start with that …

Thank you I figured out my mistake I should have put tracks in a quote inside the “if " conditions.
i.e: else if(prop === “tracks” && value !==”")

Below is my new code, any critic on how to make it much cleaner will be appreciated.

function updateRecords(id, prop, value) {

if(prop !== “tracks” && value !== “”)

{

collection[id][prop]= value;

}

else if(prop === “tracks” && !collection[id].hasOwnProperty(prop))

{

collection[id][prop]=;

collection[id][prop].push(value);

}

else if(prop === “tracks” && value !=="")

{

collection[id][prop].push(value);

}

else if (value ==="")

{

delete collection[id][prop];

}

return collection;

}

updateRecords(5439, “artist”, “ABBA”);