Если бы вы сказали мне JavaScript два месяца назад, я мог бы подумать, что вы говорите о шрифте, который используется на пакете кофе. Теперь я провожу дни, тренируясь, чтобы стать разработчиком программного обеспечения, на удивительном буткемпе Northcoders, а по ночам мечтаю о закрытии, вращении бесконечных циклов или повторяющихся кошмарах о рекурсии.
Хотя я уверен, что через несколько месяцев я оглянусь на это и содрогнусь от собственного невежества, я тем не менее благодарю вас за то, что вы меня потакали, поскольку я использую вас как свою резиновую уточку. Прокладывая путь через джунгли JavaScript, я стремлюсь получить хотя бы достаточно знаний, чтобы посмеяться над примитивным пониманием своего прошлого я (и качаю головой над своими неумелыми попытками кодировать каламбуры).
Вот несколько приемов, которые я узнал на этой неделе для работы с объектами, которые заставили меня подумать: «Это действительно полезно!»
Это объект?
При работе с объектами первая проблема, с которой вы можете столкнуться, - это установить, действительно ли что-то является одним . Если вы используете typeof с объектом, он вернет 'object' - однако он вернет то же самое для массива (который технически является своего рода объектом) и, что довольно бесполезно, 'null'.
Существует небольшой удобный метод проверки того, является ли что-то массивом или нет, и он выглядит так:
Array.isArray (объект)
obj - ваша переменная, и вы получите возвращаемое значение true или false. Нет ничего более удобного для определения того, относится ли объект к типу пар "ключ-значение" , поэтому нам, возможно, придется использовать процесс исключения.
typeof obj === «объект» &&! Arr.isArray (obj)
Приведенное выше должно помочь в большинстве случаев, хотя для большей тщательности можно добавить:
&& obj! == null
Переход по объектам
Цикл - это основа кодирования, а надежный цикл for - одно из первых, чему учатся новые программисты. И хотя существует множество функций более высокого порядка, которые позволяют выполнять цикл, бывают случаи, когда старый добрый цикл for является лучшим инструментом для работы. «Если бы это сработало и для предметов», - можете подумать вы.
Но это так! Приведенный ниже синтаксис позволяет вам перебирать каждую пару ключ-значение в объекте:
для (введите obj)
Это цикл for… in. obj - это переменная вашего объекта, а ключ объявляет новую переменную для представления каждого ключа, аналогично объявлению вашего элемента при использовании map или forEach . Не знаю, как вы, но тот факт, что это переменная, объявленная с помощью let, но без =, немного поразил меня. Затем вы можете получить доступ к значению ключа с помощью obj [key].
N.B. Возможно, вам, как и мне, будет интересно узнать, что цикл for… in также работает с массивами. К сожалению, его использование для массивов может испортить индексы, поэтому страница MDN содержит большое предупреждение об использовании ее для массивов. Если же порядок для вас не имеет значения, используйте его для обоих.
Преобразование значений объекта в массив
Еще одна Эврика! В тот момент я обнаружил, насколько легко преобразовать объект в массив.
Object.values (объект)
Вышеупомянутое создает массив из значений объекта, что может быть замечательно, если вы хотите передавать объекты и массивы через одну и ту же функцию - просто проверьте, является ли он массивом или нет, используя Array.isArray (), описанный выше , а если нет, obj = Object.values (obj). Конечно, это полезно только в том случае, если вам больше не нужны ключевые имена, поскольку они не будут включены.
Функции высшего порядка для объектов
Нет ничего, что могла бы сделать функция более высокого порядка, что вы не смогли бы воссоздать, но зачем прилагать усилия? Lodash - это библиотека готовых функций, которые можно бесплатно скачать. Многие из них похожи на существующие функции, такие как фильтр или найти, но позволяют передавать ему объекты, а также массивы, а также некоторые другие преимущества. . Также есть большой раздел функций, специально предназначенных для использования с объектами. По сути, это то, чего вы хотели, чтобы стандартные HOF. Хип-хип, массив! Я имею в виду, возражать ...