Верните reduce непосредственно из функции, используя его аккумулятор как итоговый объект. В ожидаемом примере забыли регион 4: для него тоже должен быть счётчик 1.
Сформировать объект со статистикой субъектов по регионам
Верните reduce непосредственно из функции, используя его аккумулятор как итоговый объект. В ожидаемом примере забыли регион 4: для него тоже должен быть счётчик 1.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
Задача состоит в реализации функции, принимающей массив объектов, каждый из которых содержит свойства name и region. Функция должна вернуть объект, где каждый ключ представляет номер региона, а соответствующее значение — количество субъектов, принадлежащих этому региону.
Дополнительные переменные и вспомогательные массивы использовать нельзя. Необходимо вернуть результат непосредственно из функции getResult.
interface ISubjectRegion {
name: string;
region: number;
}
interface IResult {
[key: ISubjectRegion['region']]: number;
}
const sourceData: ISubjectRegion[] = [
{ name: "Субъект 1", region: 1 },
{ name: "Субъект 2", region: 2 },
{ name: "Субъект 3", region: 2 },
{ name: "Субъект 4", region: 2 },
{ name: "Субъект 5", region: 4 },
];
// ожидаемый результат:
// {
// 1: 1, // 1 субъект в регионе 1
// 2: 3, // 3 субъекта в регионе 2
// }
function getResult(data: ISubjectRegion[]): IResult {
// реализовать здесь
}
Ответ
Верните reduce непосредственно из функции, используя его аккумулятор как итоговый объект. В ожидаемом примере забыли регион 4: для него тоже должен быть счётчик 1.
function getResult(data: ISubjectRegion[]): IResult {
return data.reduce<IResult>((result, item) => {
result[item.region] = (result[item.region] ?? 0) + 1;
return result;
}, {});
}
Для приведённого массива результат содержит 1:1, 2:3 и 4:1. Вспомогательный массив и отдельные локальные переменные не создаются; параметры callback — часть самого reduce. Числовые ключи обычного объекта во время выполнения хранятся как строки. Сложность O(n), память O(k) по числу регионов.