Найти в Дзене
DMTRVK

СОРТИРОВКА И ПОДСЧЁТ ОДИНАКОВЫХ ЭЛЕМЕНТОВ МАССИВА

Тут возникла задача автоматически посчитать одинаковые элементы массива. Сначала думал сортировать и сравнивать в цикле, но нашлось куда как более элегантное решение. 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 https://dmtrvk.ru/2019/11/22/sort-and-count/

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

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

https://dmtrvk.ru/2019/11/22/sort-and-count/