如何使用多个函数来过滤javascript中的数组?

如何使用多个函数来过滤javascript中的数组?,javascript,arrays,ecmascript-6,filter,es6-promise,Javascript,Arrays,Ecmascript 6,Filter,Es6 Promise,我想在generalFilter中使用filter1和filter2函数,但我无法理解在Javascript中使用的正确语法 const filter1 = ( array ) => { return array.filter((parameter, index) => { return ( !parameter.isOptional() ); }); }; const filter2 = ( array ) => { re

我想在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));
};

这是阿普克斯。我想做的事情,但我无法成功,我不喜欢我的逻辑。有什么方法可以正确地做到这一点吗?

您可以像这样链接多个过滤器方法:

常量数组=[1,2,3,4,5]; array.filterelem=>elem>2.filterelem=>elem>3; //返回[4,5] 这是因为返回过滤后的数组。您可以再次筛选此数组

这意味着上面的示例与编写此示例相同:

常量数组=[1,2,3,4,5] 常量tmp=array.filterelem=>elem>2; tmp.filterelem=>elem>3;
您可以像这样链接多个过滤器方法:

常量数组=[1,2,3,4,5]; array.filterelem=>elem>2.filterelem=>elem>3; //返回[4,5] 这是因为返回过滤后的数组。您可以再次筛选此数组

这意味着上面的示例与编写此示例相同:

常量数组=[1,2,3,4,5] 常量tmp=array.filterelem=>elem>2; tmp.filterelem=>elem>3;
它们是两个不同的过滤器,一次只能在参数本身上应用一个,因此我认为应该将一个应用到另一个:

const filterGeneral = array => filter1(filter2(array));

它们是两个不同的过滤器,一次只能在参数本身上应用一个,因此我认为应该将一个应用到另一个:

const filterGeneral = array => filter1(filter2(array));
您可以使用管道函数,在该函数中获取一些函数,并将第一个函数的结果作为第二个函数的输入,依此类推

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);
您可以使用管道函数,在该函数中获取一些函数,并将第一个函数的结果作为第二个函数的输入,依此类推

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);

array.filterfunc1.filterfunc2array.filterfunc1.filterFunc2这些函数执行acual筛选,因此将它们作为回调传递到.filter是没有意义的。@Andy我刚在点击应答并编辑应答后意识到这些函数执行acual筛选,所以将它们作为回调传递到.filter中是没有意义的。@Andy我刚意识到,在点击答案并编辑我的答案后,我可能会先按filter1过滤,然后按filter2过滤。我可能先按filter1过滤,然后按filter2过滤。非常有趣的方法,为什么如果是,这比链接多个过滤函数更好?它适用于任何类型,因为它独立于数组的原型函数。非常有趣的方法,为什么是,这比链接多个过滤函数更好?它适用于任何类型,因为它独立于数组的原型函数。