在 JavaScript 中,如何过滤具有动态条件的数组?

mrc*_*son 1 javascript arrays

这是我在网站上遇到的问题的简化示例。

我有一个包含以下项目的数组:

var testArr = ["Jeremy", "John", "Hank", "Hal"];
Run Code Online (Sandbox Code Playgroud)

如果我知道过滤器是什么,我可以像这样过滤它:

var testArr2 = testArr.filter(function (item){
    return item.length < 5 &&
            item.startsWith("H");
});
Run Code Online (Sandbox Code Playgroud)

在我的网站上,我有一个界面,用户可以在其中选择多个过滤器。在此示例中,用户将能够决定按长度或值的开头进行过滤。我需要能够return动态添加条件或找到其他过滤方式。我在 SO thread javascript filter array multiple conditions尝试了一些答案,但我无法将其应用于我的示例。

提前致谢!

Nin*_*olz 12

您可以通过使用实际值检查每个过滤器函数来将单个过滤器作为函数和过滤器存储在数组中。

var array = ["Jeremy", "John", "Hank", "Hal", "Hermine"],
    filters = {
        smallerThanFive: item => item.length < 5,
        startsWithH: item => item.startsWith('H')
    }
    selected = [filters.smallerThanFive, filters.startsWithH],
    result = array.filter(item => selected.every(f => f(item)));

console.log(result);
Run Code Online (Sandbox Code Playgroud)