Record Coding Challange

Tell us what’s happening:
can you help me guys, what is wrong on my code ?
I get trouble on making paranthas or push array data

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) {
if (value === "") {
  delete collection[id][prop];
} else {
  switch(prop) {
    case "tracks":
      if (collection.hasOwnProperty("tracks") === false) {
        collection[id][prop] = [];  
      } else {
        collection[id][prop].push(value);
      }
      break;
    default:
      collection[id][prop] = value;
      break;
    }
} 
return collection;
}

// Alter values below to test your code
console.log(updateRecords(5439, "artist", "ABBA"));

Your browser information:

User Agent is: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36.

Challenge: Record Collection

Link to the challenge:
https://www.freecodecamp.org/learn/javascript-algorithms-and-data-structures/basic-javascript/record-collection

What do the failing tests say? What have you tried so far to solve the problem?

      if (collection.hasOwnProperty("tracks") === false) {
        collection[id][prop] = [];  

@Fukma Currently, if there is not an existing “tracks” property in the entire collection object, you are just adding an empty array to a “tracks” property to a specific album object. You should be checking if the “tracks” property existing on a specific album.
Also, the “tracks” array should not be empty, but instead include the value passed to the function.

by read other forum i got the answer:

function updateRecords(id, prop, value) {
if (value === “”) {
delete collection[id][prop];
} else if (prop === “tracks”) {
collection[id][prop] = collection[id][prop] || ;
collection[id][prop].push(value);
} else {
collection[id][prop] = value;
}
return collection;
}

but I still don’t understand about this line:
collection[id][prop] = collection[id][prop] || ;

why we dont just put like this:
collection[id][prop] = ;

you can’t push to an array that doesn’t exist, but you can’t overwrite the content of the array

when you have an expression like a || b
if a has a falsy value (undefined is a falsy value) then the expression resolve as b (the empty array is assigned to the property)
if a has a truthy value, like an array with values inside, then the expression resolve as a, meaning that the value of the property is assigned as it to the property, it is not changed