blog/
Сортировка и подсчёт одинаковых элементов массива
Тут возникла задача автоматически посчитать одинаковые элементы массива. Сначала думал сортировать и сравнивать в цикле, но нашлось куда как более элегантное решение.
var meArray = ["el1", "el2", ...];
var counts = meArray.reduce((map, val) => {map[val] = (map[val] || 0)+1;
return map}, {} );
console.log (counts)
При чём, там есть и более читаемое решение:
var counts = {};
meArray.forEach(function(x) {counts[x] = (counts[x] || 0)+1; });
Но в одну строку ещё круче ?
Тут сразу возникает вопрос: как работает counts[x] || 0
?
Ответ: выражение counts[x] || 0
возвращает значение counts[x]
, если задано, иначе 0
. Потом просто добавляется 1 и помещается в объект.
Получается вот такое, в результате, например:
Элемент0: 98
Элемент1: 193
Элемент2: 20
Элемент3: 18
Может быть интересно:
- Скрипт для выбора победителя в инстаграме (из лайков)
- Скрипт для выбора победителя в инстаграме (из комментариев)
- Как разыграть бесплатные места на курсе вёрстки для архитекторов (JS+Instagram)
- Урок — Буквы от больших к маленьким в InDesign
- Анимация для IG с помощью JavaScript и AfterEffects
▛