JavaScript: события CustomEvent и метод dispatchEvent

2 года назад·1 мин. на чтение

В этой статье рассмотрим как создавать события Event и CustomEvent и отправлять их при помощи метода dispatchEvent(). Также рассмотрим сценарии использования кастомных событий в проектах.

События играют важную роль в web приложениях. С их помощью различные компоненты могут общаться друг с другом. Также они необходимы при реализации микрофронтенд архитектуры.

Как создать кастомное событие?

Есть несколько способов создать кастомное событие:
  • при помощи конструктора Event,
  • при помощи конструктора CustomEvent (предпочтительно)
Для того, чтобы в событии отправить дополнительные данные нужно воспользоваться CustomEvent.

Конструктор Event

Создать событие с помощью конструктора Event можно следующим образом:
const event = new Event('ADD_NOTIFICATION');
Имена событий не чувствительны к регистру (ADD_NOTIFICATION, add_notification будут восприниматься как одно и то же событие).

Конструктор CustomEvent

При помощи CustomEvent можно передавать дополнительные данные. Для этого нужно добавить их в поле detail.
const event = new CustomEvent('ADD_NOTIFICATION', {
  detail: {
    type: 'message',
    payload: 'Привет'
  }
});

Отправка событий

Событие создано, теперь нужно его отправить. Для отправки используется метод dispatchEvent(). Он принимает параметр event.
// event - объект, созданный выше
window.dispatchEvent(event);
Также в приложении есть код, который прослушивает это событие.
const handleAddNotification = (event) => {
  // ...
}
 
window.addEventListener('ADD_NOTIFICATION', handleAddNotification);

Где можно использовать кастомные события

Микрофронтенд приложения. В отличие от монолита, микрофронтенд архитектура предполагает наличие несколько изолированных частей приложения, которые используются вместе. Эти части могут быть написаны на разных фреймворках. Для того, чтобы эти части могли обмениваться между собой данными нужен слой для общения. CustomEvent - это нативное решение, не зависящее от фреймворка, отлично подходит для этих целей.

Как удалить повторяющиеся элементы массива в JavaScript?

2 года назад·3 мин. на чтение

5 простых способов удаления дубликатов элементов в массиве JavaScript.

Введение

Массивы являются одной из наиболее часто используемых структур данных в JavaScript. Часто массив может содержать дубликаты элементов, которые необходимо удалить для эффективной обработки данных. В этом блоге мы рассмотрим пять способов удаления дубликатов элементов в массиве с помощью JavaScript, ранжированных от наиболее эффективных до наименее эффективных.

1. Использование объекта Set

Объект Set является наиболее эффективным способом удаления дубликатов из массива в JavaScript. Это коллекция уникальных значений, что означает, что она автоматически удаляет дубликаты. Используя spread оператор, мы можем преобразовать объект Set обратно в массив, в результате чего получается массив, содержащий только уникальные значения. Вот пример:
const arr = [1, 1, 2, 2, 3, 4, 4, 5];
const uniqueArr = [...new Set(arr)];

console.log(uniqueArr); // [1, 2, 3, 4, 5]
В этом примере мы сначала определяем массив с повторяющимися значениями. Затем мы создаем новый объект Set с помощью оператора spread (...). Наконец, мы снова преобразуем объект Set обратно в массив с помощью оператора spread. Результирующий массив содержит только уникальные значения.

2. Использование метода .filter

Метод .filter является вторым наиболее эффективным способом удаления дубликатов из массива в JavaScript. Он создает новый массив, который включает только элементы, отвечающие определенному условию, в данном случае элемент появляется в массиве только один раз. Вот пример:
const arr = [1, 1, 2, 2, 3, 4, 4, 5];
const uniqueArr = arr.filter((item, index) => arr.indexOf(item) === index);

console.log(uniqueArr); // [1, 2, 3, 4, 5]
В этом примере мы используем метод .filter для создания нового массива uniqueArr, который включает только элементы, удовлетворяющие условию внутри функции. Условие проверяет, равен ли индекс текущего элемента индексу его первого появления в массиве. Если это так, это означает, что элемент не является дубликатом и может быть включен в новый массив.

3. Использование метода .reduce

Метод .reduce немного менее эффективен, чем метод .filter. Он позволяет свести массив к одному значению, применив функцию к каждому элементу массива. В этом случае мы можем использовать .reduce для создания нового массива, включающего только уникальные значения. Вот пример:
const arr = [1, 1, 2, 2, 3, 4, 4, 5];
const uniqueArr = arr.reduce((acc, curr) => {
  if (!acc.includes(curr)) {
    acc.push(curr);
  }
  return acc;
}, []);

console.log(uniqueArr); // [1, 2, 3, 4, 5]
В этом примере мы используем метод .reduce для итерации по каждому элементу массива и применяем функцию, которая проверяет, находится ли текущий элемент уже в массиве аккумулятора (acc). Если это не так, мы добавляем его в массив аккумулятора. Метод .reduce возвращает конечное значение массива аккумулятора, который является массивом, содержащим только уникальные значения.

4. Использование метода .forEach

Метод .forEach менее эффективен, чем предыдущие методы, но он по-прежнему является жизнеспособным вариантом. Он позволяет перебирать каждый элемент массива и применять к нему функцию. В этом случае мы можем использовать .forEach для создания нового массива, содержащего только уникальные значения. Вот пример:
const arr = [1, 1, 2, 2, 3, 4, 4, 5];
const uniqueArr = [];

arr.forEach((item) => {
  if (!uniqueArr.includes(item)) {
    uniqueArr.push(item);
  }
});

console.log(uniqueArr); // [1, 2, 3, 4, 5]
В этом примере мы используем метод .forEach для итерации по каждому элементу массива и применения функции, которая проверяет, находится ли уже текущий элемент в массиве uniqueArr. Если это не так, мы добавляем его в массив uniqueArr. Результирующий массив содержит только уникальные значения.

5. Использование цикла for

Использование цикла for является наименее эффективным способом удаления дубликатов из массива. Он требует больше кода и вычислительной мощности, и он не такой лаконичный, как другие методы. Вот пример:
const arr = [1, 1, 2, 2, 3, 4, 4, 5];
const uniqueArr = [];
for (let i = 0; i < arr.length; i++) {
  if (!uniqueArr.includes(arr[i])) {
    uniqueArr.push(arr[i]);
  }
}

console.log(uniqueArr); // [1, 2, 3, 4, 5]
В этом примере мы используем цикл for для итерации по каждому элементу массива. Проверяем, есть ли текущий элемент в массиве uniqueArr. Если это не так, мы добавляем его в массив uniqueArr. Результирующий массив содержит только уникальные значения.

Итоги

Удаление дубликатов из массива является распространенной задачей в JavaScript. В этой статье мы рассмотрели пять различных способов выполнения этой задачи с помощью JavaScript. Каждый метод имеет свои преимущества и недостатки, поэтому вам решать, какой метод наилучшим образом соответствует вашим потребностям. Независимо от того, используется ли объект Set, метод .filter, метод .reduce, метод .forEach или цикл for, можно легко удалить дубликаты из массива и более эффективно обрабатывать данные.