Обновление значений объектов JavaScript по операторам IF
У меня проблема с JavaScript
Обновление значений объектов по операторам IF. это показывает ошибку в середине кода. пожалуйста, предложите. если вам нужна дополнительная информация, пожалуйста, посмотрите внизу для получения дополнительной информации о проекте.
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) {
var collection;
if (prop != "tracks" && value.length != 0) {
collection[id][prop] = value;}
else if(prop === "tracks" && collection[id].hasOwnProperty(tracks) === false){
collection[id].prop = [];}
else if(prop === "tracks" && value != ""){
collection[id][prop].push(value);}
else if (value ===""){
delete collection[id][prop];}
return collection;
};
Вам предоставляется объект JSON, представляющий часть вашей коллекции музыкальных альбомов. Каждый альбом имеет несколько свойств и уникальный идентификационный номер в качестве ключа. Не все альбомы имеют полную информацию.
Напишите функцию, которая принимает идентификатор альбома (например, 2548), свойство prop (например, "artist" или "дорожки") и значение (например, "Addicted to Love") для изменения данных в этой коллекции.
Если проп не "дорожки" и значение не пустое (""), обновите или установите значение для свойства этого альбома записи.
Ваша функция всегда должна возвращать весь объект коллекции.
Существует несколько правил обработки неполных данных:
Если prop - "дорожки", но у альбома нет свойства "дорожки", создайте пустой массив перед добавлением нового значения в соответствующее свойство альбома.
Если prop - "дорожки", а значение не пустое (""), поместите значение в конец существующего массива дорожек альбома.
Если значение пустое (""), удалите указанное свойство prop из альбома.
подсказки:
Используйте скобочные обозначения при доступе к свойствам объекта с помощью переменных.
Push - это метод массива, о котором вы можете прочитать в Mozilla Developer Network.
Вы можете обратиться к Манипулированию Сложными Объектами, Представляющим Нотацию Объекта JavaScript (JSON) для повышения квалификации.
1 ответ
Как насчет этого?
// Only change code below this line
function updateRecords(id, prop, value) {
//var collection; 【Modified 1】I think it's unnecessary. this time I use Global Variable.
if (prop != "tracks" && value.length != 0) {
collection[id][prop] = value;}
// 【Modified 2】 hasOwnProperty(tracks) → hasOwnProperty("tracks")
// 【Modified 3】 add the condition 'value != ""', just in case.
else if(prop === "tracks" && collection[id].hasOwnProperty("tracks") === false && value != ""){
// 【Modified 4】collection[id].prop → collection[id].tracks or collection[id][prop]
// 【Modified 5】[] → [value]. You need a value as well as initialize, right?
collection[id].tracks = [value];}
else if(prop === "tracks" && value != ""){
collection[id].tracks.push(value);}
// 【Modified 6】It's okay to keep it, but if it doesn't have a property, there's no reason to run delete.
else if (value ==="" && collection[id].hasOwnProperty("tracks")){
delete collection[id][prop];}
//return collection;
};
Кроме того, я не уверен, что ваша проблема, так как этот вопрос немного недостаток информации.
Нам нужна именно проблема, в данном случае что-то вроде этого:
// call
updateRecords("1245", "tracks", "test");
// Getting Error
// Uncaught ReferenceError: tracks is not defined