Как в массиве найти одинаковые элементы
Перейти к содержимому

Как в массиве найти одинаковые элементы

  • автор:

Вывести элементы массива, имеющие одинаковые значения

Помогите пожалуйста, я тут пытаюсь колдовать с поиском одинаковых значений в массиве. Речь не о дубликатах, а именно о элементах массива, которые имеют большее количество копий, чем 1 (т. е. не [1, 1], a [1, 1, 1, 1, 1 и т. д.]). У меня получилось вывести значения, имеющие только дубликаты:

let arr = [1, 2, 2, 3, 4, 5, 6, 1, 7, 4, 9, 9, 10, 3] let uniq = []; for (let i = 0; i < arr.length; i++) < for (let j = 0; j < i; j++) if (arr[j] === arr[i]) < uniq.push(arr[i]) >> console.log(uniq)

но когда добавляется больше одинаковых значений в массив (например, число 9 в массиве), то код работает некорректно:

let arr = [1, 2, 3, 4, 5, 6, 1, 7, 1, 4, 9, 9, 9, 9, 9, 9, 10, 3] let uniq = []; for (let i = 0; i < arr.length; i++) < for (let j = 0; j < i; j++) if (arr[j] === arr[i]) < uniq.push(arr[i]) >> console.log(uniq)

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

Есть ли в массиве одинаковые элементы

Дан массив целых чисел. Проверить, есть ли в нем одинаковые элементы.

Чтобы проверить каждый элемент массива на уникальность, надо сравнить его с остальными элементами. Так первый элемент следует сравнить со вторым, третьим и так далее до конца. После этого второй элемент сравнивать с третьим, четвертым и так далее. Второй элемент с первым сравнивать не надо, так как они уже сравнивались при оценке уникальности первого элемента. Когда очередь дойдет до предпоследнего элемента, то он сравнивается только с последним. Последний же уже сравнивать не надо. Таким образом, количество итераций внешнего цикла на 1 меньше, чем элементов в массиве. Счетчик этого цикла — это номер элемента, который сравнивается с элементами стоящими после него.

Внутренний цикл перебирает элементы от следующего за исследуемым до последнего. На данном отрезке элементы массива сравниваются с исследуемым элементом. Если какой-то элемент окажется равен исследуемому, значит, что в массиве есть одинаковые значения. Следует вывести соответствующее сообщение и завершить программу, так как дальше уже можно не проверять.

Если программа в процессе выполнения циклов не завершилась, то значит, одинаковых элементов найдено не было. Следует вывести сообщение, что все элементы массива разные.

Программа на языке Паскаль:

const N = 10; var arr: array[1..N] of byte; i, k: byte; begin randomize; for i:=1 to N do begin arr[i] := random(80); write(arr[i]:3); end; writeln; for i:=1 to N-1 do for k:=i+1 to N do if arr[i] = arr[k] then begin writeln('Есть одинаковые элементы'); exit; end; writeln('Все элементы уникальны'); end.

Примеры выполнения кода:

 13 76 31 13 32 18 2 70 76 8 Есть одинаковые элементы
 59 11 18 46 25 39 44 10 23 6 Все элементы уникальны

Как найти одинаковые элементы в массиве js?

Для нахождения одинаковых элементов можно использовать следующий алгоритм:

  1. Находим количество вхождений (сколько раз встречается в списке) для каждого элемента
  2. Выводим только те, у которых количество вхождений больше 1

Алгоритм можно реализовать с помощью цикла:

const numbers = [4, 3, 3, 1, 15, 7, 4, 19, 19]; // исходный массив const countItems = <>; // здесь будет храниться промежуточный результат // получаем объект в котором ключ - это элемент массива, а значение - сколько раз встречается элемент в списке // например так будет выглядеть этот объект после цикла: // // 1 встречается в тексте 1 раз, 2 встречается 2 раза, 4 встречается 2 раза и так далее for (const item of numbers)  // если элемент уже был, то прибавляем 1, если нет - устанавливаем 1 countItems[item] = countItems[item] ? countItems[item] + 1 : 1; > // обрабатываем ключи объекта, отфильтровываем все, что меньше 1 const result = Object.keys(countItems).filter((item) => countItems[item] > 1); console.dir(result); // => ['3', '4', '19'] 

20 октября 2022

Найти повторяющиеся значения в массиве можно, используя метод indexOf() и функцию высшего порядка filter:
Рассмотрим пример:

const values = [1, 100, 5, 6, 13, 13, 22, 5]; // предположим, что у нас есть числовой массив const duplicates = values.filter((number, index, numbers) =>  console.log(number); // number - элемент массива console.log(index); // index - индекс элемента массива console.log(numbers); // numbers - представление массива values return numbers.indexOf(number) !== index; >); 

Метод indexOf() возвращает первый индекс, по которому данный элемент может быть найден в массиве.
Соответственно, фильтруем значения, индекс которых не равен индексу, который вернул метод indexOf().

console.log(duplicates); // => [ 13, 5 ] 

Всё получилось! В массив duplicates вернулись дубликаты.

Документация:
  • indexOf()

как найти повторяющиеся элементы в массиве js

Для поиска повторяющихся элементов в массиве в JavaScript можно использовать несколько подходов.

Рассмотрим вариант с использованием цикла for и инструкции if :

const arr = [1, 2, 3, 2, 4, 5, 4, 6]; const duplicates = []; for (let i = 0; i  arr.length; i++)  for (let j = i + 1; j  arr.length; j++)  if (arr[i] === arr[j] && !duplicates.includes(arr[i]))  duplicates.push(arr[i]); > > > console.log(duplicates); // [2, 4] 

Этот код ищет дубликаты в массиве. Он проходится по массиву и проверяет каждый элемент на соответствие с остальными элементами массива. Если два элемента совпадают и дубликат еще не добавлен в массив дубликатов, то он добавляется.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *