@dargezrogue

Как найти количество повторяющихся элементов массива?

Дан массив [ '-.........', '.....', '-....-', '.....' ] необходимо произвести подсчет элементов-дубликатов.
Как реализовать?
  • Вопрос задан
  • 11816 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Формулировка вопроса какая-то расплывчатая. Непонятно, о каком количестве повторяющихся элементов идёт речь - взятых в единственном экземпляре, или с учётом повторений. Т.е., каким должен быть результат для, например, такого массива - [ 7, 7, 7, 0, 1, 1 ]? В первом случае 2 - повторяются семёрка и единица, во втором 5 - три семёрки плюс две единицы.

Количество уникальных дубликатов:

const duplicateCount = Object
  .values(arr.reduce((acc, n) => (acc[n] = (acc[n] || 0) + 1, acc), {}))
  .filter(n => n > 1)
  .length;

// или

const duplicateCount = Array
  .from(arr.reduce((acc, n) => acc.set(n, acc.has(n)), new Map).values())
  .reduce((acc, n) => acc + n, 0);

// или

const duplicateCount = new Set(arr.filter((n, i, a) => i !== a.indexOf(n))).size;

С учётом повторений:

const duplicateCount = Object
  .values(arr.reduce((acc, n) => (acc[n] = acc.hasOwnProperty(n), acc), {}))
  .reduce((acc, n) => acc - !n, arr.length);

// или

const duplicateCount = Array
  .from(arr.reduce((acc, n) => acc.set(n, -~acc.get(n)), new Map).values())
  .reduce((acc, n) => acc + (n > 1) * n, 0);

// или

const duplicateCount = arr
  .filter((n, i, a) => a.indexOf(n) !== a.lastIndexOf(n))
  .length;
Ответ написан
@glagolew059
frontend developer
function arrayCountValues (arr) {
    var v, freqs = {};

    for (var i = arr.length; i--; ) { 
        v = arr[i];
        if (freqs[v]) freqs[v] += 1;
        else freqs[v] = 1;
    }
    return freqs;
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Skolozub09
@Skolozub09
Middle JS Developer
const arrayOfDuplicateElements = [ '-.........', '.....', '-....-', '.....' ]

const getNumberOfDuplicateItems = arr => {
  const set = new Set()
  arr.forEach(el => set.add(el))

  const initialArrayLength = arr.length
  const uniqueArrayLength = [...set].length

  return initialArrayLength - uniqueArrayLength
}

console.log(getNumberOfDuplicateItems(arrayOfDuplicateElements))


or

const arrayOfDuplicateElements = [ '-.........', '.....', '-....-', '.....' ]

const getNumberOfDuplicateItems = arr => arr.length - [...new Set(arr)].length

console.log(getNumberOfDuplicateItems(arrayOfDuplicateElements))
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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