TL; доктор
let uniqueArray = [...new Set([5,5,2,2,2,4,2])]; // [5,2,4]
Простите?
Извините за титул многолетнего – иногда вещи можно лучше объяснить с примером кода.
Представьте себе, что у вас есть массив JavaScript, который содержит много элементов, некоторые из которых дублируются:
let dupeArray = [1,1,4,5,4,4,2,1,5];
Ваша цель – удалить дубликаты и оставить только одну запись за значение:
let uniqueArray = [1,4,5,2];
Вы можете написать для петли или использовать карта
или Фильтр
Чтобы получить этот результат. Существует миллион различных способов решать проблему в компьютерном программировании (что это так весело!). ES6 вводит кучу новых функций, в том числе наборов, которые мы также можем использовать для решения этой проблемы в одной строке кода.
Примечание: Тип элемента может быть строками или смесью чисел и строк, но я использую целые числа здесь, потому что они быстрее введите!
Что такое набор?
Набор – это новая структура данных, представленная в ES6. Цитируя напрямую из MDN :
Установленные объекты – это коллекции значений. Вы можете потерять элементы набора в порядке вставки. Значение в наборе может происходить только один раз; Это уникально в коллекции набора.
Правило для уникальных значений является то, что мы можем использовать для нашего преимущества здесь.
Давайте создадим набор, добавьте некоторые значения к нему и запрашивайте размер. (Вы можете следовать в консоли инструментов разработчиков современного браузера):
let mySet = new Set().add(1).add(3).add(2).add(1); // Set(3) {1, 3, 2} mySet.size // 3
Обратите внимание, как финал 1
не было добавлено, а размер набора остался в 3 вместо 4. В массиве это было бы добавлено, а длина будет 4.
Есть два способа добавления значений на набор. Во-первых, используя Добавить
метод, как указано выше. Во-вторых, передав массив к конструктору ( Новый набор ()
):
let arraySet1 = new Set([3,2,1]); // Set(3) {3, 2, 1}
Дублированные значения также удаляются, если они включены в начальный массив:
let arraySet2 = new Set([8,8,9,2]); // Set(3) {8,9,2} arraySet2.size; // 3
Вы, вероятно, можете увидеть, где это происходит. Все, что осталось сделать, это конвертировать этот набор в массив, и мы достигли нашей оригинальной цели. Есть два способа сделать это: как с использованием методов ES6.
Array.from ()
Array.rom
Метод создает новый массив из массивной структуры:
let dupeArray = [3,2,3,3,5,2]; let uniqueArray = Array.from(new Set(dupeArray));
Распространение оператора …
Эти три точки повсеместно повсеместно в ES6. Они обрезают везде и имеют несколько целей (и они правая боль в Google). Когда мы используем их как Распространение оператора Их можно использовать для создания массива:
let uniqueArray = [...new Set(dupeArray)];
Какой из этих двух методов вы должны использовать? Синтаксис распространения выглядит круто, но Array.rom
более явно в его целях и проще читать. Они оба выполняют то же самое здесь, поэтому выбор твой!
Заключение
Что-то, что потребовало бы много линий кода и переменных теперь, теперь может быть выполнено в однопрочее в ES6. Какое время быть живым.
let uniqueArray = [...new Set([5,5,2,4,2])]; // [5,2,4]
Оригинал: “https://dev.to/clairecodes/how-to-create-an-array-of-unique-values-in-javascript-using-sets-5dg6”