Похоже, вы пытаетесь учесть первую итерацию, где acc
будет первым элементом массива.
К счастью, reduce
уже имеет способ объяснить это. В MDN последний аргумент - это initialValue
, с которого acc
будет начинаться. Только когда не указан initialValue
, функция acc
станет функцией. В вашем случае вы можете передать пустой массив []
так:
const sucess = () => true;
const failed = () => false;
const tester = (...args) => {
return [...args].reduce((acc,currentValue) => ([...acc,currentValue()]), []);
}
console.log(tester(sucess,failed,failed,sucess));
Это делает логику c очень простой, поскольку вы гарантированно, что acc
- это всегда массив и ничего больше.
В качестве отступления Как указано в комментариях, вы делаете преобразование массива некоторых значений с отображением в массив других значений. Это точный вариант использования Array.map()
. Вышесказанное может быть выполнено более кратко, как это:
const sucess = () => true;
const failed = () => false;
const tester = (...args) => args.map(fn => fn());
console.log(tester(sucess,failed,failed,sucess));