Object.fromEntries(Object.entries(arr.reduce((acc, c) => (acc[c] = (acc[c] ?? 0) + 1, acc), {})).filter((pair) => pair[1] > 2)
вернёт объект {значение: счётчик}
из элементов, которых «больше 2 шт». Для примера в вопросе вернёт {1: 3}
, т.е. «единиц — было три»reduce()
'ом проходим по массиву, собирая словарь, где ключи – уникальные значения из массива, а значения – счётчики, сколько раз каждое встретилось.[ключ, значение]
; фильтруем, оставляя только те, где значение > 2, и снова собираем в объект.const arr = [1, 2, 9, 12, 1, 24, 1, 9];
const result = arr.reduce((acc, v) => ({...acc, [v]: (acc[v] || 0) + 1}), {});
Читал про деструктивное присвоение, но там были значения в массиве, а тут в объекте.https://developer.mozilla.org/en-US/docs/Web/JavaS...
Вроде логично, что мы сразу должны получить массив данных, а уже после с ним что-то делать, а тут мы его просто получаем и все.https://medium.com/byte-sized-react/component-arra...
map()
возвращает новый массив. arr = arr.map( ... )
И почему нельзя использовать {age}
?
map()
заменяет элемент массива на возвращаемое значение. Что вернули, то будет в новом массиве лежать. Взяли объект, вернули только поле возраста, удвоенное. Т.е. получили массив удвоенных возрастов, а имена потерялись.