Record Collection - updateRecords(...)[5439].tracks.pop is not a function

Tell us what’s happening:
I keep getting this error when running my code. I pulled the sample from the help page and it worked but I don’t know why mine isn’t working. The error is also thrown when running it with no additional code.

updateRecords(…)[5439].tracks.pop is not a function

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 != '' && value == '') {
    delete collection[id][prop];
  }
  else if (prop != 'tracks' && value != '') {
    collection[id][prop] = value;
  }
  else if (prop == 'tracks' && value != '') {
    if (collection[id][prop]) {
      collection[id][prop].push(value);
    } 
    else {
       collection[id][prop] = value;
    }
  }

  
  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/75.0.3770.142 Safari/537.36.

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

it means that there is a value that should be an array (pop is an array method) that instead is not an array, and so the test that is trying to use that method to test the function is erroring that way

there is something that is not an array but should be, can you find it?

2 Likes

Aha! Thank you!

function updateRecords(id, prop, value) {
    if (prop != '' && value == '') {
      delete collection[id][prop];
    }
    else if (prop != 'tracks') {
      collection[id][prop] = value;
    }
    else if (prop == 'tracks') {
      if (collection[id][prop]) {
        collection[id][prop].push(value);
      } 
      else {
        var t = [];
        t.push(value);
        collection[id][prop] = t;
      }
    }

  
  return collection;
}

you could have just added square brackets around value and it would have worked

Your code has been blurred out to avoid spoiling a full working solution for other campers who may not yet want to see a complete solution. In the future, if you post a full passing solution to a challenge and have questions about it, please surround it with [spoiler] and [/spoiler] tags on the line above and below your solution code.

Thank you.