, чтобы сохранить свой прогресс
Смотрел и пробовал вариации исполнения задания и возник вопрос.
В таком исполнении код работает:
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 = [], то здесь мы получаем в переменную чистый массив без единого элемента.
Возможно вы видели что-то типа такого: (смотрите решение Оли Ершовой)
Здесь смысл в том, что если у треков вообще нет еще значения, то мы сначала задаем пустой массив. Но потом обратите внимание, что мы проверяем переменню value и если она не пустая, то добавляем ее к этому массиву.
То есть суть проверки массива и установка пустого массива такова:
- Если массива еще нет, то создаем его.
- Если есть, то оставляем как есть.
- В итоге в любом случае у нас есть переменная-массив и мы пушим в нее значение, если оно не пустое.
Хотел узнать: почему если убрать двойные ковычки в свойстве "artist" тут -
updateRecords(5439, "artist", "ABBA"); и соответственно такие ковычки - [ ] в функции там где аргумент prop (предварительно перед ним ставя точку) все перестает работать? Изначально же в объекте JSON свойства идут без ковычек(" ") и доступ к ним мы можем получить используя путь без ковычек([ ]), например: console.log(collection[2548].artist) - будет "Bon Jovi". Для меня это было не понятно из предыдущих уроков. Да и сравнения я делал изначально так: if (prop != tracks...), то есть тоже без кавычек (в уловии задачи кстати тоже идет просьба сравнить с tracks без ковычек). Это ошибка синтаксиса доступа именно внутри функции? То есть вне функции мы можем обращаться к свойству объекта без использования ковычек а внутри функции при обращении ко всем свойствам и работе с аргументами мы должы ставить ковычки и спользовать [ ] соответственно?
Вы имеете ввиду квадратные скобки? ' и " - это кавычки, а [] - это квадратные скобки.
Не вижу вашего примера как именно вы пытаетесь что делать, но предположу, что вы запутались со случаями использования переменных. К примеру, есть объект:
Если вы оперируете самими именами свойств, то да, можете обратиться к свойствам без скобок, например
Но, если вы хотите использовать переменную с именем, то тут только через квадратные скобки. Например
Здесь вы получите ["one", "two"], потому что фактически будет запрошено artists["Jon"].albums
Но если вы попытаетесь не через скобки, а через точку запросить artists.name.albums, то получите ["five", "six"], так как не будет использовано значение переменной name, а будет обращение к свойству name объекта.