首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有没有更好的方法用reduce测试n个函数?[JS]

有没有更好的方法用reduce测试n个函数?[JS]
EN

Stack Overflow用户
提问于 2020-01-15 07:25:58
回答 1查看 93关注 0票数 0

我创建了一个简单的函数来测试(调用) 'n‘个参数(函数),并以数组的形式返回结果,但我不确定这是否是使用reduce的正确方式(查看下面的注释行)。

代码语言:javascript
运行
复制
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));

你做什么?

EN

Stack Overflow用户

回答已采纳

发布于 2020-01-15 07:31:54

看起来您正在尝试考虑第一次迭代,其中acc将是数组的第一个元素。

幸运的是,reduce已经有了解决这一问题的方法。对于每个MDN,最后一个参数是acc启动时所使用的initialValue。只有当没有给定initialValue时,acc才会成为函数。在本例中,您可以传入一个空数组[],如下所示:

代码语言:javascript
运行
复制
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()的用例。以上操作可以更简洁地完成,如下所示:

代码语言:javascript
运行
复制
const sucess = () => true;
const failed = () => false;


const tester = (...args) => args.map(fn => fn());

console.log(tester(sucess,failed,failed,sucess));

票数 5
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59743206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档