如何在循环中.js延迟链接多个过滤器(从数组)

How to chain multiple filters in lazy.js in a loop (from array)

本文关键字:过滤器 数组 链接 循环 延迟 js      更新时间:2023-09-26

我有一个数组,其中包含需要应用于Lazy.js中的项目数组的过滤器函数。我尝试使用 for 循环,但只应用了最后一个过滤器。

function (searchText) {
    var result = Lazy(input);
    for (var query of this.querylist) {
        result = result.filter((item) => {
            return query.filterFunc(item, searchText, query.compareFunc);
        });
    }
    return result.toArray();
}

有没有办法在不对链接进行硬编码的情况下应用过滤器列表?

这是一个显示问题的小提琴

您可以使用reduce循环访问过滤器,并通过将每个过滤器应用于前一个过滤器来创建结果过滤器。

var result = Lazy(contentArray);
var allFilters = filters.reduce(function(acc, current) {
    return acc.filter((item) => current.filterFunc(item)); // return the last one with the current filter applied
}, result); // start with the original one

console.log(allFilters.toArray())

你可以在这里找到更新的小提琴。

减少只是一种更好、更通用的方式:

var allFilters = result
                  .filter(filters[0])
                  .filter(filters[1])
                  .filter(filters[2]);

Lazy.js 不会调用过滤器,直到您调用 toArray 或 forEach。我在这个例子中放了一些日志。