Aquí están las instrucciones.
Su función siempre debe devolver el objeto de colección de registros completo.
Si la propiedad no son pistas y el valor no es una cadena vacía, actualice o establezca la propiedad de ese álbum en valor.
Si prop son pistas pero el álbum no tiene una propiedad de pistas, cree una matriz vacía y agréguele valor.
Si prop son pistas y el valor no es una cadena vacía, agregue valor al final de la matriz de pistas existente del álbum.
Si el valor es una cadena vacía, elimine la propiedad prop dada del álbum. Nota: Para las pruebas se utiliza una copia del objeto recordCollection.
Mi solución fue:
function updateRecords(records, id, prop, value) { return records; 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');
¿Por qué no funcionó esto?
Una posible solución a esta tarea
const 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:[]},5439:{albumTitle:"ABBA Gold"}}; function updateRecords(records, id, prop, value) { const record = records[id]; if (!value) { delete record[prop]; return records; } if (prop === 'tracks') { record[prop] ??= []; record[prop].push(value); return records; } record[prop] = value; return records; }; console.log(updateRecords(recordCollection, 5439, 'artist', 'ABBA')[5439]); console.log(updateRecords(recordCollection, 5439, "tracks", "Take a Chance on Me")[5439]); console.log(updateRecords(recordCollection, 2548, "artist", "")[2548]) console.log(updateRecords(recordCollection, 1245, "tracks", "Addicted to Love")[1245]) console.log(updateRecords(recordCollection, 2548, "tracks", "")[2548]) console.log(updateRecords(recordCollection, 1245, "albumTitle", "Riptide")[1245])
.as-console-wrapper {max-height: 100% !important; top: 0}
la manera de hacer eso:
primero cree registros significativos para las pruebas.
PD: el uso de la asignación lógica nula (??=) simplifica enormemente el código.
const rec0 = { 5439 : { prop1: "aaa" } } , rec1 = { 5439 : { prop1: "aaa", artist: 'xyz' } } , rec2 = { 5439 : { prop1: "aaa", artist: 'xyz' } } , rec3 = { 5439 : { prop1: "aaa" }} , rec4 = { 5439 : { prop1: "aaa", tracks: ['aa','bb','cc'] }} , rec5 = { 5439 : { prop1: "aaa", tracks: ['aa','bb','cc'] }} ; console.log( JSON.stringify( updateRecords( rec0, 5439, 'artist', 'ABBA' ))) console.log( JSON.stringify( updateRecords( rec1, 5439, 'artist', 'ABBA' ))) console.log( JSON.stringify( updateRecords( rec2, 5439, 'artist', '' ))) console.log( JSON.stringify( updateRecords( rec3, 5439, 'tracks', 't1' ))) console.log( JSON.stringify( updateRecords( rec4, 5439, 'tracks', 't1' ))) console.log( JSON.stringify( updateRecords( rec5, 5439, 'tracks', '' ))) function updateRecords(records, id, prop, value) { if (prop == 'tracks') { records[id].tracks ??= []; if (value.length) records[id].tracks.push(value); else delete records[id].tracks; } else if (value.length) records[id][prop] = value; return records; }
.as-console-wrapper {max-height: 100% !important;top: 0;} .as-console-row::after {display: none !important;}