我创建了一个简单的函数来测试(调用) 'n‘个参数(函数),并以数组的形式返回结果,但我不确定这是否是使用reduce的正确方式(查看下面的注释行)。
const sucess = () => true;
const failed = () => false;
const tester = (...args) => {
return [...args].reduce((acc,currentValue) => {
if(typeof acc === 'function') // this is right?
return [acc(),currentValue()]
return [...acc,currentValue()]
});
}
console.log(tester(sucess,failed,failed,sucess));
你做什么?
发布于 2020-01-15 07:31:54
看起来您正在尝试考虑第一次迭代,其中acc
将是数组的第一个元素。
幸运的是,reduce
已经有了解决这一问题的方法。对于每个MDN,最后一个参数是acc
启动时所使用的initialValue
。只有当没有给定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));
这使得逻辑非常简单,因为您可以保证acc
始终是一个数组,而不是其他任何东西。
顺便说一句,正如注释中所指出的,您所做的是将一些值的数组与映射转换为其他值的数组。这正是Array.map()
的用例。以上操作可以更简洁地完成,如下所示:
const sucess = () => true;
const failed = () => false;
const tester = (...args) => args.map(fn => fn());
console.log(tester(sucess,failed,failed,sucess));
https://stackoverflow.com/questions/59743206
复制相似问题