Благодаря ES2015 получение только уникальных элементов массива в JavaScript стало проще.
Сегодняшний урок будет быстрым. В жизни каждого кодировщика наступает время, когда он больше не может терпеть дублирование своих данных. Раньше вам нужно было развернуть цикл, возможно, содержащий уродливый indexOf
, чтобы найти эти отдельные значения в ваших массивах.
Благодаря достижениям, внесенным в ES2015 (обновление, формально известное как ES6), теперь мы можем сделать это в одной строке:
Если вы новичок в чудесном мире ES6, здесь много всего происходит. Суть уловки в том, что ES6 предоставляет нам объект Set
, который (для всех целей и целей) является уникальным массивом. К счастью для нас, его можно построить из простого старого массива. Следовательно, (new Set(dupArr))
дает нам набор, содержащий все уникальные элементы в массиве dupArr
.
Однако Set
- это, в общем, Set
, а не Array
. Это станет очевидным, если вы попытаетесь применить к результату какие-либо полезные встроенные модули сбора (здесь нет .map
или .reduce
…). Set
s итерируемы, что означает, что мы можем использовать оператор распространения (…
). Проще говоря, оператор распространения означает получить все элементы, содержащиеся в.
Когда в строке 3 мы распространяем Set
, мы получаем все элементы, которые он содержит. Строка 3, таким образом, просто создает массив, состоящий из всех элементов в Set
, который, как мы теперь знаем, содержит все уникальные элементы исходного массива.
Мы можем пойти немного дальше во втором (бонусном) примере. На этот раз мы складываем .map
, чтобы преобразовать массив объектов в массив, состоящий из их id
значений. Затем они дедуплицируются так же, как и старый массив.
Для полноты синтаксиса функции карты используются деструктуризация объекта и стрелочные функции (обе функции ES6). Его можно читать следующим образом: из объекта извлеките значение свойства id
и сделайте его аргументом для функции с именем id
: ({ id })
. Стрелка - это сокращение (на самом деле, это более технический, чем это) для функции, которая возвращает единственный аргумент, который она получила, theid
.
Простой.