我有一个数组,其中包含需要应用于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();
}
有没有办法在不对链接进行硬编码的情况下应用过滤器列表?
答案 0 :(得分:5)
您可以使用缩小来迭代过滤器,并通过将每个过滤器应用到上一个过滤器来创建结果过滤器。
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())
您可以找到更新的小提琴here。
reduce 只是一种更好,更通用的方法:
var allFilters = result
.filter(filters[0])
.filter(filters[1])
.filter(filters[2]);
在您调用toArray或forEach之前,Lazy.js不会调用过滤器。我在this example中添加了一些日志。