首页 > 解决方案 > 如何使用多个函数来过滤 javascript 中的数组?

问题描述

我想在 generalFilter 中使用 filter1 和 filter2 函数,但我无法理解在 Javascript 中执行此操作的正确语法。

const filter1 = (
  array
) => {

  return array.filter((parameter, index) => {
    return (
      !parameter.isOptional()
    );
  });
};

const filter2 = (
  array
) => {

  return array.filter((parameter, index) => {
    return (
      !parameter.isEmpty()
    );
  });
};

const filterGeneral = (
  array
) => {
  return array.filter(filter1(array) && filter2(array));
};

这是大约。我正在尝试做的事情,但我无法成功,而且我不喜欢我的逻辑。有没有办法正确地做到这一点?

标签: javascriptarraysecmascript-6filteres6-promise

解决方案


您可以使用管道函数,在其中获取一些函数并将第一个函数的结果作为第二个函数的输入,依此类推。

const
    pipe = (...functions) => input => functions.reduce((acc, fn) => fn(acc), input),
    filter1 = array => array.filter((parameter, index) => !parameter.isOptional()),
    filter2 = array => array.filter((parameter, index) => !parameter.isEmpty()),
    filterGeneral = pipe(filter1, filter2),
    array = [{ ... }, { ... }],
    result = filterGeneral(array);

推荐阅读