img

5 полезных советов по JavaScript, которые помогут вам сэкономить время

21 ноября
20:00
Бесплатный вебинар
Введение в Docker
Ведущий — Филипп Игнатенко.
Руководитель центра разработки
Записаться
img
img

 

Я всегда мечтал создавать видео, связанные с моим хобби – программированием. Но я понимал, что я не являюсь носителем языка, что меня пугало, и я не решался пробовать.

Но пару недель назад, когда я готовил несколько полезных советов по JavaScript для начала своего путешествия в мир YouTube, я написал вот этот список советов, которые могут сэкономить ваше время. Я надеюсь, что они помогут вам также, как и мне когда-то.

В этой статье я хочу поделиться с вами пятью полезными советами по JavaScript (готовы окунуться?)

Деструктуризация объектов

Деструктуризация – это функция, которая появилась в ES6. Это одна из тех функций, которой вы будете пользоваться постоянно, стоит вам только узнать, как она работает. 

Она поможет вам справиться с тремя главными вопросами:

  • Повтор. Каждый раз, когда вы извлекаете свойство какого-либо объекта и создаете новую переменную, вы записываете все это в новую строку. 
const user = {
  firstName: "John",
  lastName: "Doe",
  password: "123",
};

// Wow... should we display
// John's password like that?
{ // Ну и ну… неужели мы должны выводить
  // пароль Джона вот таким образом? }

const firstName = user.firstName;
const lastName = user.lastName;
const password = user.password;
  • Доступность. Каждый раз, когда вы пытаетесь получить доступ к свойству какого-либо объекта, вы должны указать путь до него (например, user.firstName, user.firstName и т.д.).
  • Использование. Скажем, вы создали новую функцию и при этом работаете лишь с одним свойством объекта. 

Итак, теперь вы знаете, что это за проблемы, связанные с объектами. Так, как же их можно решить?

Как решить вопрос с повтором?

const user = {
  firstName: "John",
  lastName: "Doe",
  password: "123",
};

const { firstName, lastName, password } = user;

console.log(firstName, lastName, password);
// Output: 'John', 'Doe', '123' { // Вывод: 'John', 'Doe', '123' }

Деструктуризация – это процесс извлечения свойства объекта по его ключу. Если вы возьмете существующий ключ, который есть у объекта, и поместите его в скобки ({ firstName }), то, таким образом, сообщите JavaScript следующее:

 «Эй, JavaScript, я хочу создать переменную с таким же именем, как у моего свойства. Я хочу создать переменную под названием firstName для свойства под названием firstName, которое есть у моего объекта.»

Примечание: если вы хотите произвести деструктуризацию объекта, то вам в любом случае нужен существующий ключ. При ином раскладе такой подход работать не будет.

Как решить вопрос с доступностью?

const user = {
  firstName: "John",
  lastName: "Doe",
  password: "123",
  family: {
    sister: {
      firstName: "Maria",
    },
  },
};

// We access to the nested object `sister`
// and we extract the `firstName` property
{ // Мы получаем доступ к вложенному объекту sister
  // и извлекаем свойство firstName }
const { firstName } = user.family.sister;

console.log(firstName);
// Output: 'Maria'

Если вы работаете с вложенными объектами и постоянно пытаетесь получить доступ к одному и тому же свойству, это может вам наскучить и, кроме того, занять слишком много времени. 

Однако у вас есть возможность сократить путь к свойству до одной переменной. Для этого вам нужно воспользоваться деструктурированием, и все это можно сделать в одну строку. 

Как решить вопрос с использованием?

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

Если вы знакомы с React, то, скорее всего, вы уже знаете, как это делать.

function getUserFirstName({ firstName }) {
  return firstName;
}

const user = {
  firstName: "John",
  lastName: "Doe",
  password: "123",
};

console.log(getUserFirstName(user));
// Output: 'John'

В примере выше у нас есть функция getUserFirstName, и при этом мы знаем, что она будет использовать лишь одно свойство нашего объекта - firstName.

И в данном случае вместо того, чтобы передавать весь объект или создавать новую переменную, мы можем просто деструктурировать параметры функции объекта.

Как можно объединять объекты в ES6?

В программировании довольно часто возникают проблемы, связанные со структурами данных, и их нужно как-то решать. Благо, в ES6 появился spread-оператор и упростил манипуляции с объектами и массивами. 

const user = {
  firstName: "John",
  lastName: "Doe",
  password: "123",
};

const userJob = {
  jobName: "Developer",
  jobCountry: "France",
  jobTimePerWeekInHour: "35",
};

Давайте представим, что у нас есть два объекта:

  • User. Это объект, который определяет общую информацию о пользователе.
  • UserJob. Это объект, который определяет информацию о работе пользователя. 

Наша задача – создать один объект, который бы содержал свойства только этих двух объектов.

const user = {
  firstName: "John",
  lastName: "Doe",
  password: "123",
};

const userJob = {
  jobName: "Developer",
  jobCountry: "France",
  jobTimePerWeekInHour: "35",
};

const myNewUserObject = {
  ...user,
  ...userJob,
};

console.log(myNewUserObject);
// Output:
//{
//  firstName: 'John',
//  lastName: 'Doe',
//  password: '123',
//  jobName: 'Developer',
//  jobCountry: 'France',
//  jobTimePerWeekInHour: '35'
//}

С помощью spread-оператора (…) мы можем извлечь все свойства из одного объекта и поместить их в другой.

const user = {
  firstName: "John",
  lastName: "Doe",
  password: "123",
};

const userJob = {
  jobName: "Developer",
  jobCountry: "France",
  jobTimePerWeekInHour: "35",
};

const myNewUserObject = {
  ...user,
  ...userJob,
};

console.log(myNewUserObject);
// Output:
//{
//  firstName: 'John',
//  lastName: 'Doe',
//  password: '123',
//  jobName: 'Developer',
//  jobCountry: 'France',
//  jobTimePerWeekInHour: '35'
//}

Как объединять массивы?

const girlNames = ["Jessica", "Emma", "Amandine"];
const boyNames = ["John", "Terry", "Alexandre"];

const namesWithSpreadSyntax = [...girlNames, ...boyNames];

console.log(namesWithSpreadSyntax);
// Output: ['Jessica', 'Emma', 'Amandine', 'John', 'Terry', 'Alexandre']

Как и в случае с объектами, spread-оператор (…) извлекает все элементы из одного массива и помещает их в другой.

const girlNames = ["Jessica", "Emma", "Amandine"];

const newNewArray = [
  ...girlNames,
  // We extract: { // Мы извлекаем следующие элементы: }
  // - 'Jessica'
  // - 'Emma'
  // - 'Amandine'
  // and send them to { // и отправляем их }
  // a new array `[]` { // в новый массив }
];

Как удалять дубликаты в массиве?

Массивы – это те же списки, а значит, в них может присутствовать большое количество одинаковых элементов. Если вы хотите избавиться от дубликатов в своем массиве, то можете воспользоваться одним из способов, которые мы привели ниже.

Один из способов позволяет сделать это в одну строку (благодаря ES6), но мы привели и «старый» способ для сравнения. 

Как удалять дубликаты: старый способ

const animals = ["owl", "frog", "canary", "duck", "duck", "goose", "owl"];

const uniqueAnimalsWithFilter = animals.filter(
  // Parameters example: 'owl', 0, ['owl', 'frog', 'canary', 'duck', 'duck', 'goose', 'owl']
{ // Пример параметров: 'owl', 0, ['owl', 'frog', 'canary', 'duck', 'duck', 'goose', 'owl'] }
  (animal, index, array) => array.indexOf(animal) == index
);

console.log(uniqueAnimalsWithSet);
// Output: ['owl', 'frog', 'canary', 'duck', 'goose']

Давайте посмотрим на пример выше. Здесь мы хотим очистить массив под названием animals от всех дубликатов.

Мы можем сделать это с помощью функции filter и метода indexOf внутри нее.

Функция filter берет все элементы из массива animals (animals.filter). После чего для каждого вхождения предоставляются следующие данные:

  • Текущее значение (примерduck)
  • Индекс (пример0)
  • Первоначальный массив (пример: массив animals => ['owl', 'frog', 'canary', 'duck', 'duck', 'goose', 'owl'])

Мы применяем метод indexOf к каждому вхождению исходного массива и передаем переменную animal (текущее значение) в качестве параметра.  

indexOf вернет первый индекс текущего значения (пример: для значения «owl» индекс будет 0).

Затем внутри функции filter мы сравниваем значение indexOf с текущим индексом. Если они совпадают, то мы возвращаем true, в противном случае - false.

Функция filter создаст новый массив, в котором будут только те элементы, для которых было возвращено значение true.

То есть в нашем случае: ['owl', 'frog', 'canary', 'duck', 'goose'].

Как удалять дубликаты: новый способ

Ну скажем так, «старый» способ довольно интересный, но при этом долгий и немного сложный. Так что, давайте посмотрим на «новый» способ:

const animals = ["owl", "frog", "canary", "duck", "duck", "goose", "owl"];

const uniqueAnimalsWithSet = [...new Set(animals)];

console.log(uniqueAnimalsWithSet);
// Output: ['owl', 'frog', 'canary', 'duck', 'goose']

Давайте посмотрим на каждый шаг в отдельности:

// 1
const animals = ["owl", "frog", "canary", "duck", "duck", "goose", "owl"];

// 2
const animalsSet = new Set(animals);

console.log(animalsSet);
// Output: Set { 'owl', 'frog', 'canary', 'duck', 'goose' }

// 3
const uniqueAnimalsWithSet = [...animalsSet];

console.log(uniqueAnimalsWithSet);
// Output: ['owl', 'frog', 'canary', 'duck', 'goose']

У нас есть массив под названием animals, и мы преобразуем его в тип Set – специальный тип объектов в ES6.

Что его отличает от остальных, так это то, что он позволяет создавать набор уникальных значений. 

ПримечаниеSet – это набор уникальных значений, но это не массив.

Раз уж мы имеем объект типа Set с уникальными значениями, мы должны преобразовать его обратно в массив.

Для этого мы должны воспользоваться spread-операторами, которые позволят нам деструктурировать объект и отправить все свойства в новый массив.

За счет того, что объект типа Set имеет только уникальные свойства, наш новый массив также будет иметь только уникальные значения. 

Как использовать тернарный оператор?

Вы слышали когда-нибудь о таком способе, который позволяет писать небольшие условия в одну сроку?

Если нет, то настало время избавиться от блоков if-else и начать использовать вместо них небольшие тернарные операторы.

Давайте для начала взглянем на пример с console.log. Идея здесь вот в чем: мы должны проверить значение переменной и при определенных условиях отобразить на экране вывод.

const colour = "blue";

if (colour === "blue") {
  console.log(`It's blue!`);
} else {
  console.log(`It's not blue!`);
}

Данный пример – это типичный случай использование тернарного оператора, который позволяет заменить 5 строк всего одной!

Всего одна строка!

const colour = "blue";

colour === "blue" ? console.log(`It's blue!`) : console.log(`It's not blue!`);
// [condition] ? [if] : [else] { // [условие] ? [if] : [else] }

Тернарный оператор может заменить if и else в случае небольших условий.

Примечание: в ситуациях со сложными условиями, тернарный оператор лучше не использовать, поскольку он может снизить читаемость.

Ниже есть еще один пример, в котором используется тернарный оператор. Здесь он применяется в операторе return внутри функции. 

function sayHelloToAnne(name) {
  return name === "Anne" ? "Hello, Anne!" : "It's not Anne!";
}

console.log(sayHelloToAnne("Anne"));
// Output: 'Hello, Anne!'

console.log(sayHelloToAnne("Gael"));
// Output: "It's not Anne!"

Заключение 

Надеюсь, что эта статья стала для вас полезной и вы смогли узнать что-то новое о JavaScript.

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
Программирование
Скидка 25%
Фронтенд-разработчик с нуля
Погрузитесь в мир веб-разработки, освоив основные инструменты работы: HTML, CSS, JavaScript. Научитесь работать с дизайн-макетами и адаптивной версткой, сверстаете свои первые страницы и поймете, как строить карьерный трек в ИТ.
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
Гипервизор - это программное обеспечение для виртуализации, используемое для создания и запуска виртуальных машин (ВМ). Гипервиз
img
Виртуализация серверов позволяет запускать несколько виртуальных машин на одном физическом сервере. Запуск виртуальных машин (ВМ
img
Сегодня мы рассмотрим, как настроить и использовать PHP в проекте. Но прежде чем начать, нужно понять, что такое PHP. Что такое
img
Как разработчик, вы знаете, что HTML расшифровывается как HyperText Markup Language (язык разметки гипертекста). HTML — это язык
img
Бесконечные споры вокруг искусственного интеллекта приводят к путанице. Существует много терминов, которые кажутся похожими, но
img
SVG расшифровывается как масштабируемая векторная графика. Это веб-дружелюбный векторный формат файлов, используемый для отображ
21 ноября
20:00
Бесплатный вебинар
Введение в Docker