Why do I have to add square brackets to make this code work? (eg: records[id][prop] = [value]; at below) If I take square brackets away, it cannot fulfill the ” After updateRecords(recordCollection, 5439, “tracks”, “Take a Chance on Me”) , tracks should have the string Take a Chance on Me as the last element.” requirement.
Why?
var recordCollection = { 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: null }, 5439: { albumTitle: 'ABBA Gold' } }; // Only change code below this line function updateRecords(records, id, prop, value) { if (prop !== 'tracks' && value !== "") { records[id][prop] = value; } else if (prop === "tracks" && records[id].hasOwnProperty("tracks") === false) { records[id][prop] = [value]; } else if (prop === "tracks" && value !== "") { records[id][prop].push(value); } else if (value === "") { delete records[id][prop]; } return records; } updateRecords(recordCollection, 5439, 'artist', 'ABBA');
Advertisement
Answer
tracks
props is an array, as defined for Bon Jovi & Prince:
tracks: ["1999", "Little Red Corvette"]
In this statement, you want to add a tracks
to the artist:
prop === "tracks"
.
But the artist hasn’t any tracks
yet:
records[id].hasOwnProperty(“tracks”) === false
.
So you need to init the tracks
array before adding any values to it:
records[id][prop] = [value];
PS:
You used records[id].hasOwnProperty("tracks") === false
.
But for Robert Palmer, the props tracks
exists and isn’t an array.
You should use :
(records[id].hasOwnProperty("tracks") === false || !Array.isArray(records[id]['tracks]))
.