Как оставить в массиве только уникальные значения js
5 лет назад
Человек-Молекула
Ответы
Чтобы оставить в массиве только уникальные значения, воспользуемся таким лайфхаком:
Документация:
4 года назад
Виктория Аблаева
Чтобы получить из массива уникальные значения, можно воспользоваться простым алгоритмом:
- Инициируем простой массив, в который будем складывать результат
- Проходимся по исходному массиву и на каждой итерации проверяем, если в результате еще нет текущего элемента, то добавляем его в результат.
Для реализации можно использовать либо цикл, либо встроенные методы для перебора массива, например reduce:
5 лет назад
Ivan Gagarinov
Чтобы оставить в массиве только уникальные значения, можно воспользоваться методами filter() и indexOf():
Принцип работы заключается в том, что мы сравниваем индекс текущего элемента массива (ind) с индексом первого вхождения этого элемента в массив (arr.indexOf(el)). И если они не равны, то это означает, что вхождение данного элемента в массив является не первым, то есть элемент ранее уже встречался в массиве.
4 года назад
Кирилл Маркеев
По сути как первое решение, но чуть усовершенствованное. Работает на ВСЕХ типах, включая объекты и функции (но кроме null/false/undefined)
4 года назад
4 года назад
Виталий Меншиков
Уникальные значения массива оставляет Set — коллекция, которая хранит каждое значение один раз:
Порядок сохраняется: каждое значение остаётся на месте первого появления. То же самое: Array.from(new Set(numbers)).
Через filter
Элемент остаётся, если его первое вхождение совпадает с текущей позицией. На больших массивах способ медленный: indexOf каждый раз проходит массив сначала. На массиве из десятков тысяч элементов разница с Set заметна.
Массив объектов
Set сравнивает объекты по ссылке, и два объекта с одинаковыми полями для него разные:
Уникальные по полю id — через Map:
Если id повторяется, в результате останется последний объект с этим id.
Без учёта регистра
Только значения, которые встречаются один раз
Обратная задача — убрать всё, что повторяется:
NaN
Set считает NaN равным NaN, а indexOf — нет. Поэтому filter с indexOf удалит из массива все NaN.
Коллекции и методы массивов разбирают в бесплатном курсе «Основы JavaScript».
7 дней назад
Никита Вихров






