Typescript数组函数遍历问题

问题描述 投票:1回答:1

我的程序有一个检查很多条件的地方。

与编写一个大的if(conditionOne || conditionTwo || ...)类型的表达式相反,我决定定义一个像这样的过滤器数组:

const filters: Array<(err: MyError) => boolean> = [
      (e: MyError) => e.checkSomething(),
      (e: MyError) => e.checkSomethingElse,
      (e: MyError) => e.checkSomethingYetAgain()
    ];

然后我像这样遍历它:

for (const key in filters) {
      if (filters[key](err)) {
        return true;
      }
    }
return false;

我觉得有更多功能性的表达方式(从现在开始,在我看来,这看起来太必要了),但我不确定它的外观。谢谢!

arrays typescript function loops functional-programming
1个回答
1
投票

也许与find

function makeErrorFilter(filters: Array<(err: MyError) => boolean>) {
  return (err: MyError) => !!filters.find(filter => filter(err));
}

const errorFilter = makeErrorFilter([
  (e: MyError) => e.checkSomething(),
  (e: MyError) => e.checkSomethingElse,
  (e: MyError) => e.checkSomethingYetAgain()
]);
© www.soinside.com 2019 - 2024. All rights reserved.