Использование метода javascript .every для определения наличия повторяющихся элементов в заданном массиве.

Я не буду вдаваться в подробности о том, как работает этот метод, есть и другие статьи среднего уровня, в которых он подробно рассматривается. Здесь мы сосредоточимся на этом конкретном случае использования. Но сначала мы начнем с быстрого официального определения .every в MDN:

Метод every() проверяет, все ли элементы массива проходят тест, реализованный предоставленной функцией. Он возвращает логическое значение.

Синтаксис:

arr.every(callback(element[, index[, array]])[, thisArg])

В этом случае нам нужно использовать только arr.every(callback(element)). Хотя, как вы можете видеть выше, метод принимает два дополнительных аргумента.

Простой пример использования метода:

let words = [“hello”, “goodbye”, “goodmorning”];
const everyLength = words.every(function (w) {
  return w.length > 4;
});
//everyLength
//true

Каждый элемент в массиве слов имеет длину больше 4, поэтому метод возвращает значение true.

Теперь, как мы можем использовать его для поиска повторяющихся значений в заданном массиве? Хорошо, давайте перефразируем вопрос: как мы можем гарантировать, что первое вхождение элемента массива является последним? К счастью, есть два связанных метода Javascript, которые проверяют эти два условия: .indexOf() и .lastIndexOf().

Из МДН:

Метод indexOf() возвращает в вызывающем объекте String индекс первого вхождения указанного значения. Метод lastIndexOf() возвращает индекс в вызывающем объекте String последнего вхождения указанного значения

Мы можем использовать .every вместе с этими двумя методами в логическом (истинном или ложном) виде, чтобы достичь нашей цели проверки на наличие повторяющихся элементов массива.

function hasNoDuplicates(arr){
  return arr.every(function(val){
    return arr.indexOf(val) === arr.lastIndexOf(val);
  });
}

Мы проверяем (возвращаем true), является ли каждое значение(val)в заданном массиве(arr) first(indexOf)и последний(lastIndexOf). Если нет, функция вернет false.

используя наш массив слов сверху:

let words = [“hello”, “goodbye”, “goodmorning”];
hasNoDuplicates(words)
true

Теперь давайте добавим еще одно «привет»

let words2 = ["hello", "goodbye", "goodmorning", "hello"];
hasNoDuplicates(words2)
false

Вот и все, быстрая проверка «да» или «нет» на наличие повторяющихся значений в данном массиве.