Обновление значений объектов 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
Другие вопросы по тегам