Приведение в порядок лего — отличный способ проиллюстрировать 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);