@Maj1

Как проверить, что в массиве есть одинаковые объекты?

Есть такой код js:
var arr = [];
document.querySelectorAll('.swiper-slide .parametr__group_index-'+i+'.parametr__index-'+j+':not(.comparison__grid_item_parameter)').forEach(el => {
        arr.push(el);
      })
      
      if(hasDuplicates(arr)) {
        arr.forEach(ell => {
          ell.setAttribute('test', true); 
        })
      }

нужно через функцию hasDuplicates проверить, есть ли в массиве arr несколько одинаковых объектов. Если есть, то выдвать true, если нет, то false
  • Вопрос задан
  • 63 просмотра
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Пара способов:
  1. по-правильному можно сравнивать каждый-с-каждым правее, пока не найдётся первое равенство.
  2. в одну строку можно очистить от повторов, конвертировав массив в Set (и снова в массив), и сравнить длины

спойлер №1
const hasDuplicates = arr => {
  for (let L = 0; L < arr.length - 1; L++) {
    for (let R = L + 1; R < arr.length; R++) {
      if (arr[L] === arr[R]) return true;
    }
  }

  return false;
};

спойлер №2
const hasDuplicates = arr => arr.length !== (new Set(arr)).size;


P.S. за один-единственный вызов document.querySelectorAll() дубликатов точно не нахватает. Вся затея с дублями имеет смысл, только когда вызывают это дело несколько раз.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы