Формирование структуры из массива объектов по полю type

За один проход создайте две таблицы по type: массивы исходных элементов и агрегаты count/weight. Для banana получится count=2 и weight=76.

Короткий ответ

Что ответить на собеседовании

За один проход создайте две таблицы по type: массивы исходных элементов и агрегаты count/weight. Для banana получится count=2 и weight=76.

Подробный разбор

Ответ с пояснениями

Условие

  1. Необходимо получить объект, где каждое уникальное значение свойства type из исходного массива служит ключом, а соответствующее значение – массив всех элементов с этим типом.
  2. Также требуется построить объект, в котором ключи – те же типы, а значения – объекты вида {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).

ИИ-помощник для собеседований

Хочешь уверенно проходить собеседования?

Попробуй ИИ-помощник для собеседований: слышит вас и собеседника, анализирует экран, подсказывает ответы в реальном времени, работает без VPN и не попадает в захват экрана.

Подробнее