Создание агрегированной таблицы товаров

Группируйте по type, накапливая ids и числовой вес. Строку '4' нужно явно преобразовать в число, иначе вместо суммы получится конкатенация.

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

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

Группируйте по type, накапливая ids и числовой вес. Строку '4' нужно явно преобразовать в число, иначе вместо суммы получится конкатенация.

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

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

Условие

Дан массив объектов, представляющих товары. Необходимо реализовать функцию, которая собирает товары в структуру‑таблицу, группируя их по полю type и подсчитывая суммарный вес каждой группы.

 const products = [
    { id: 'ab', name: 'Имя-01', type: 'сталь', weight: 1 },
    { id: 'bc', name: 'Имя-02', type: 'чугун', weight: 2 },
    { id: 'cd', name: 'Имя-03', type: 'сталь', weight: 3 },
    { id: 'de', name: 'Имя-04', type: 'чугун', weight: 4 },
    { id: 'ef', name: 'Имя-05', type: 'чугун', weight: 5 },
    { id: 'fg', name: 'Имя-06', type: 'сталь', weight: '4' },
];

// Требуемый результат – объект, где ключом является тип, а значением – объект с массивом id и суммой весов:
// {
//   'сталь': { ids: ['ab', 'cd', 'fg'], totalWeight: 8 },
//   'чугун': { ids: ['bc', 'de', 'ef'], totalWeight: 11 },
// }

const generateTable = arr => {
    console.log(arr);
};

Ответ

Группируйте по type, накапливая ids и числовой вес. Строку '4' нужно явно преобразовать в число, иначе вместо суммы получится конкатенация.

function generateTable(arr) {
  const result = Object.create(null);
  for (const item of arr) {
    const weight = typeof item.weight === 'number' ? item.weight
      : typeof item.weight === 'string' && item.weight.trim() !== '' ? Number(item.weight) : NaN;
    if (!Number.isFinite(weight) || weight < 0) throw new TypeError('Некорректный вес');
    result[item.type] ??= { ids: [], totalWeight: 0 };
    result[item.type].ids.push(item.id);
    result[item.type].totalWeight += weight;
  }
  return result;
}

Сталь даст вес 8, чугун — 11. Объект без прототипа безопасно принимает произвольные названия типов. IDs сохраняются в исходном порядке; исходный массив не изменяется. Время O(n), память пропорциональна числу сохранённых ID.

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

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

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

Подробнее