@HarryDaamn

Как получить дубликаты из масиива и вывести их?

Всем добрый вечер! Мне нужно получить все дубликаты из массива и вернуть их в функцию. Спойлер функция работает. Проблема только в массиве с [0,0,0,0]
function getDuplicates(items) {
  // write code here
  const sortedArr = items.slice().sort();

  const results = [];

  for(let i = 0; i < sortedArr.length; i++) {
    if(sortedArr[i + 1] == sortedArr[i]) {
      results.push(sortedArr[i]);
    }
  }

  return results;
}


5f6b9a0994910988343948.png
  • Вопрос задан
  • 176 просмотров
Решения вопроса 1
hzzzzl
@hzzzzl
Проблема только в массиве с [0,0,0,0]

с любым массивом, в котором элемент повторяется больше чем 2 раза

function getDuplicates(items) {
  const sortedArr = items.slice().sort();
  const results = new Set();  // <= только уникальные

  for(let i = 0; i < sortedArr.length; i++) {
    if(sortedArr[i + 1] == sortedArr[i]) {
      results.add(sortedArr[i]);  // <= добавится в Set только один раз
    }
  }

  return Array.from(results);
}
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
0xD34F
@0xD34F Куратор тега JavaScript
const getDuplicates = arr => Array
  .from(arr.reduce((acc, n) => (acc.set(n, (acc.get(n) || 0) + 1), acc), new Map))
  .filter(n => n[1] > 1)
  .map(n => n[0]);

или

const getDuplicates = arr =>
  [...arr.reduce((acc, n) => (acc[+acc[0].has(n)].add(n), acc), [ new Set, new Set ])[1]];

или

const getDuplicates = arr =>
  [...new Set(arr.filter((n, i, a) => a.includes(n, i + 1)))];

или

const getDuplicates = arr => arr
  .filter((n, i, a) => i !== a.indexOf(n))
  .filter((n, i, a) => i === a.indexOf(n));
Ответ написан
Ваш ответ на вопрос

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

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