За один проход создайте две таблицы по type: массивы исходных элементов и агрегаты count/weight. Для banana получится count=2 и weight=76.
Формирование структуры из массива объектов по полю type
За один проход создайте две таблицы по type: массивы исходных элементов и агрегаты count/weight. Для banana получится count=2 и weight=76.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
Условие
- Необходимо получить объект, где каждое уникальное значение свойства type из исходного массива служит ключом, а соответствующее значение – массив всех элементов с этим типом.
- Также требуется построить объект, в котором ключи – те же типы, а значения – объекты вида {count: количество элементов данного типа, weight: суммарный вес всех элементов этого типа}.
const arr = [
{ type: "banana", weight: 32 },
{ type: "apple", weight: 24 },
{ type: "kiwi", weight: 55 },
{ type: "banana", weight: 44 },
{ type: "orange", weight: 5 }
];
Ответ
За один проход создайте две таблицы по type: массивы исходных элементов и агрегаты count/weight. Для banana получится count=2 и weight=76.
const grouped = Object.create(null);
const totals = Object.create(null);
for (const item of arr) {
(grouped[item.type] ??= []).push(item);
const stat = totals[item.type] ??= { count: 0, weight: 0 };
stat.count++;
stat.weight += item.weight;
}
Для apple суммарный вес 24, kiwi — 55, orange — 5; у каждого count=1. Предполагаются строковый type и числовой weight. Объекты без прототипа безопасно принимают ключи вроде constructor. grouped содержит ссылки на исходные элементы, а не их копии; сложность O(n).