Как отфильтровать неуникальные значения в массиве с помощью JavaScript?

Опубликовано: 24 Августа, 2022

В JavaScript массивы — это объекты, использующие индекс в качестве ключа значений. В этой статье давайте посмотрим, как мы можем отфильтровать все неуникальные значения и взамен получить все уникальные и неповторяющиеся элементы.

Подход: В массиве для уникальных элементов индекс первого и последнего вхождения элементов должен быть одинаковым, иначе, если они разные, это подтверждает, что массив имеет дубликат по какому-то другому индексу в том же массиве. Все неуникальные значения должны быть остановлены фильтром() , а вывод должен быть уникальные значения.

Способ 1: Использование фильтра() метод

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

Синтаксис:

var newarr=initial_arr.filter((value ,index)=>{
  conditions with return statement;
});

Example:

Javascript




<script>
  var array = [1, 2, 2, 3, 4, 5, 6, 6, 7, 8, 8, 8];
  console.log("Before filtering non unique values: " + array);
  
  var unique = array.filter((value, index) => {
    return array.indexOf(value) === array.lastIndexOf(value);
  });
  console.log("After filtering non unique values: " + unique);
</script>

Выход:

Before filtering non unique values: 1,2,2,3,4,5,6,6,7,8,8,8
After filtering non unique values: 1,3,4,5,7

Способ 2: по тому же принципу, но с использованием цикл for().

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

Синтаксис:

for (let i = start; condition to i;increment or decrement) {
    instruction1;
    instruction2;
    instruction3;
    .
    .
    .
};

Example:

Javascript




<script>
  var array = [1, 2, 2, 3, 4, 5, 6, 6, 7, 8, 8, 8];
  console.log("Before filtering non unique values: " + array);
  var unique = [];
  for (let i = 0; i < array.length; i++) {
    if (array.lastIndexOf(array[i]) === array.indexOf(array[i])) {
      unique.push(array[i]);
    }
  }
  
  console.log("After filtering non unique values: " + unique);
</script>


Output:

Before filtering non unique values: 1,2,2,3,4,5,6,6,7,8,8,8
After filtering non unique values: 1,3,4,5,7