Record Collection - HELP

Tell us what’s happening:

So, I’ve seen the solution offered, however, I’m not understanding why my code isn’t working as expected. My solution does solve for all, except updateRecords(1245, “tracks”, “Addicted to Love”). The logic by itself works, (if (prop == “tracks” && collection[id][“tracks”] == []) { collection[id][“tracks”].push(value)}. But within the context of my script it fails. Which indicates it’s a logical error.

I don’t see why it’s failing.

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"
    }
};
// Keep a copy of the collection for tests
var collectionCopy = JSON.parse(JSON.stringify(collection));

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

// Alter values below to test your code
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/70.0.3538.110 Safari/537.36.

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

I take that back, upon further review, my logic for that particular section doesn’t seem to work… I’ll keep toying with it.

  • Arrays are Objects in JavaScript and you cannot compare two objects by value.
let myArr = [];
console.log(myArr == []); // false
  • But really you want to pusha track only if the tracks property is an empty array. You would want to push to it if it was an array containing items.

I re-evaluated and realized that I was attempting to evaluate the property of Collection and not the ‘value’ argument.

I change to if(prop == "tracks" && value !=="") { code here} and it executed as expected.