Приведение в порядок лего — отличный способ проиллюстрировать Array.reduce(). Арпи Ванян спасибо, что нашли время объяснить метод. Я хочу указать на одну небольшую ошибку в вашей функции редуктора. Вы получите TypeError of Невозможно прочитать свойство hasOwnProperty со значением undefined после первой итерации, поскольку вы не возвращаете shelfOfBoxes .

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

const bricks = [
  { set: 'b-wing', type: 'brick', size: '2x2', color: 'black' },
  { set: 'house', type: 'roof', size: '4x2', color: 'red' },
  { set: 'hp', type: 'spider', size: '1x1', color: 'black' },
  { set: 'b-wing', type: 'panel', size: '4x8', color: 'gray' },
  { set: 'b-wing', type: 'brick', size: '2x2', color: 'black' },
  { set: 'house', type: 'brick', size: '6x1', color: 'white' }
];

const shelf = bricks.reduce(
  (shelfOfBoxes, brick, brickNumber, pile) => {
    if (!(shelfOfBoxes.hasOwnProperty(brick.set))) {
      shelfOfBoxes[brick.set] = [];
    }
    shelfOfBoxes[brick.set].push(brick); 
    return shelfOfBoxes;
}, {});
console.log(shelf);