img

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

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

icon strelka icons icons

узнай больше на курсе

Python программист с нуля
Стань разработчиком на одном из самых популярных языков программирования - Python
Укажите вашу электронную почту
Неверный адрес электронной почты
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных
Готово!
Отправили доступы на вашу
электронную почту
Java-разработчик с нуля
Освойте backend-разработку и программирование на Java, фреймворки Spring и Maven, работу с базами данных и API
Укажите вашу электронную почту
Неверный адрес электронной почты
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных
Готово!
Отправили доступы на вашу
электронную почту
C# разработчик с нуля
На курсе ты освоишь основы программирования на C#, включая синтаксис, объектно-ориентированное программирование и асинхронное программирование.
Укажите вашу электронную почту
Неверный адрес электронной почты
Нажимая на кнопку, вы соглашаетесь на обработку персональных данных
Готово!
Отправили доступы на вашу
электронную почту

Но пару недель назад, когда я готовил несколько полезных советов по 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.

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
icon strelka icons icons

узнай больше на курсе

Python программист с нуля
Стань разработчиком на одном из самых популярных языков программирования - Python
Подробнее о курсе
Java-разработчик с нуля
Освойте backend-разработку и программирование на Java, фреймворки Spring и Maven, работу с базами данных и API
Подробнее о курсе
C# разработчик с нуля
На курсе ты освоишь основы программирования на C#, включая синтаксис, объектно-ориентированное программирование и асинхронное программирование.
Подробнее о курсе
Фронтенд-разработчик с нуля
Погрузитесь в мир веб-разработки, освоив основные инструменты работы: HTML, CSS, JavaScript
Подробнее о курсе
Разработка приложений на Flutter и Dart
Научись создавать кроссплатформенные приложения на Flutter, освой язык Dart
Подробнее о курсе
Автоматизированное тестирование на Python
Изучите автоматизацию тестирования на Python чтобы стать востребованным специалистом
Подробнее о курсе
Еще по теме:
img
SQL или NoSQL, вот в чём вопрос! И как раз с этим вопросом мы поможем сегодня разобраться. Что использовать в каких случаях, где есть какие преимущества и как возможно использовать их все вместе.
img
Вебхуки позволяют различным системам обмениваться данными в реальном времени. В этой статье мы разберём, что такое вебхук, как он работает, где и зачем его использовать, а также как настроить.
img
Redis — один из самых популярных инструментов для хранения данных. В статье разбираем, что такое Redis и как его можно использовать.
img
Маска подсети помогает определить, какие устройства находятся в одной сети, а какие – за её пределами. В этой статье разберём, что такое маска подсети, зачем она нужна и как её использовать.
Весенние скидки
30%
50%
60%
До конца акции: 30 дней 24 : 59 : 59