По своей природе «задумка» reduce это свести массив к одному значению. То что иногда это значение может быть объектом/массивом это уже вариации.
Классический пример это суммирование элементов массива.
[1, 2, 3, 4].reduce((sum, val) => { return sum + val }, 0)
// → 10
Но порой reduce используют для каких-то «экзотических» задач. Например хочу объект с ключами которые хранятся в массиве:
['foo', 'bar', 'quux'].reduce((obj, key) => { obj[key] = true; return obj; }, {});
// → { foo: true, bar: true, quux: true }
На выходе мы получили объект, но концептуально мы всё ещё «свели» 3 значения массива к одному значению — объекту.