Итерируя по number
(лучше назвать его arr
, это массив, а не число), используйте объект для отслеживания того, сколько раз каждое число встречалось до сих пор.Затем итерируйте получившийся объект entries
, чтобы создать нужные объекты:
let arr = [1, 3, 2, 1];
function numberCount(arr) {
let count = 0;
const obj = arr.reduce((a, num) => {
a[num] = (a[num] || 0) + 1;
return a;
}, {});
return Object.entries(obj).map(([key, val]) => ({ [key]: val }));
}
console.log(numberCount(arr));
Цифровые клавиши всегда идут в цифровом порядке в объекте.Если вы хотите, чтобы объекты в выходных данных имели порядок вставка (например, объект с ключом 3
перед объектом с ключом 2
), тогда используйте Map
вместо объекта (ключи карты будут перебираться в порядке вставки):
let arr = [1, 3, 2, 1];
function numberCount(arr) {
let count = 0;
const map = arr.reduce((a, num) => (
a.set(num, (a.get(num) || 0) + 1)
), new Map());
return [...map.entries()]
.map(([key, val]) => ({ [key]: val }));
}
console.log(numberCount(arr));