, чтобы сохранить свой прогресс
26 сент. 2021 г., 0:05

Обсуждение задания "Record Collection"

Смотрел и пробовал вариации исполнения задания и возник вопрос.
В таком исполнении код работает:

function updateRecords(id, prop, value) { if (prop != 'tracks' && value != "") { collection[id][prop] = value; } else if (!collection[id].hasOwnProperty(prop)){ collection[id][prop] = [value]; // но если заменить [value] на просто [] код не работает. Хотя я видел другие участники при решении задачи применяли [] . Я что-то упускаю? } else if (prop === 'tracks' && value != "") { collection[id][prop].push(value); } else if (value === "") { delete collection[id][prop]; } return collection; }


Илья, когда мы значению присваиваем вот так: someVar = [value], то здесь мы сразу получаем новый массив, содержащий один элемент value. То есть это уже не пустой массив, а с одним элементом.
Когда мы присваиваем вот так: someVar = [], то здесь мы получаем в переменную чистый массив без единого элемента.
Возможно вы видели что-то типа такого: (смотрите решение Оли Ершовой)

switch (prop) { case "tracks": if (!item[prop]) { item[prop] = [] } value && item[prop].push(value) break;



Здесь смысл в том, что если у треков вообще нет еще значения, то мы сначала задаем пустой массив. Но потом обратите внимание, что мы проверяем переменню value и если она не пустая, то добавляем ее к этому массиву.
То есть суть проверки массива и установка пустого массива такова:
- Если массива еще нет, то создаем его.
- Если есть, то оставляем как есть.
- В итоге в любом случае у нас есть переменная-массив и мы пушим в нее значение, если оно не пустое.

Добавить комментарий