Выше приведено решение задачи freecodecamp по структуре данных и алгоритму JS. Это ссылка на вызов. Код находится в конце блога.

Вот некоторые из моих заметок, пытающихся решить эту проблему:

Свойства JS-объекта

Ниже приведен данный объект recordCollection .

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'
  }
};

Значения объекта Javascript записываются парами key:value.

Пример: const cat = {breed: 'Ragdoll', age: 4}

Используйте object.key для доступа к его значению. Пример: cat.breed возвращает 'Ragdoll' .

В этом задании объект recordCollection имеет вложенные/дочерние объекты, которые являются идентификаторами альбомов 2548, 2468, 1245, 5439. Эти дочерние объекты имеют соответствующие пары key:value, например, дочерний объект 1245 имеет две пары key:value artist: 'Robert Palmer' и tracks: [] .

Постоянные объекты JS

«Константа» в JS вводит в заблуждение. Ключевое слово const определяет не объект, а его ссылку на объект. Следовательно, постоянный объект НЕ может быть переназначен. Но его свойства МОГУТ быть изменены.

Пример:

const cat = {breed: 'Ragdoll', age: 4};

cat.breed = 'Birman'; // reassign breed to a new value 
cat.color = 'grey';   // append a new property

const cat = {breed: 'Birman', color: 'grey'}; // this is not allowed

Напишите функцию для обновления свойств объекта

Напишите функцию, которая принимает четыре параметра: records, id, prop, value и возвращает records.

Глядя на данный объект, каждый альбом имеет уникальный идентификационный номер в качестве ключа и несколько других свойств. Не все альбомы имеют полную информацию.

Функция должна удовлетворять всем следующим требованиям:

  • Функция всегда должна возвращать весь объект коллекции записей.
  • Если prop не равно tracks и value не является пустой строкой, обновите или задайте для prop этого альбома значение value.
  • Если prop равно tracks, но в альбоме нет свойства tracks, создайте пустой массив и добавьте к нему value.
  • Если prop равно tracks, а value не является пустой строкой, добавьте value в конец существующего массива tracksальбома.
  • Если value — пустая строка, удалите данное свойство prop из альбома.

Данная функция для изменения:

function updateRecords(records, id, prop, value) {
return records;
}

Логика

Требования можно упростить следующим образом:

  • Если аргумент, переданный в prop, равен tracks, а в альбоме нет свойства tracks, создайте пустой массив с именем tracks.
  • Если аргумент, переданный в prop, равен tracks, а аргумент, переданный в value, не является пустой строкой '', то добавьте это value в массив tracks
  1. иначе, если аргумент, переданный в prop, не является tracks, а аргумент, переданный в value, не является пустой строкой'', тогда назначьте value на prop
  2. иначе, если value является пустой строкой '', то удалите свойство prop из альбома

Проверки перед записью функции

  1. Доступ к свойствам объекта с помощью записи через точку или квадратных скобок:
const cat = {breed: 'Ragdoll', age: 4};

cat.breed  // returns the string 'Ragdoll'
cat[breed] // returns the string 'Ragdoll'

2. Добавление свойств объекта через точку:

const cat = {breed: 'Ragdoll', age: 4};

cat.color = 'grey'  // adds a new key:value pair color: 'grey'

3. Операторы сравнения

4. В условном тестовом выражении в качестве выражения может использоваться свойство объекта. Если свойство существует, выражение оценивается true и false в противном случае.

const cat = {breed: 'Ragdoll', age: 4};

if (cat.breed) {console.log(true)}
else {console.log(false)}        // prints true to console

5. Чтобы добавить новый элемент в массив, используйте метод .push()

var cats = ['Meo Meo', 'Na'];

cats.push('Pew'); // this adds 'Pew' to the end of the array cats

6. Удаление свойства из объекта приведет к удалению его ключа и значения delete object.property.

const cat = {breed: 'Ragdoll', age: 4};

delete cat.breed  // delete key:value pair of breed: 'Ragdoll'

Конечная функция

function updateRecords(records, id, prop, value) {
  if (prop === "tracks" && (!(records[id]).tracks))
    {records[id].tracks = [];}

  if (prop === "tracks" && value !== "") 
    {records[id].tracks.push(value);}

  else if (prop !== "tracks" && value !== "")
    {records[id][prop] = value;}

  else if (value === "")                                    
    {delete records[id][prop];}

return records;
}