如何在循环中链接 lazy.js 中的多个过滤器(来自数组)
How to chain multiple filters in lazy.js in a loop (from array)
我有一个数组,其中包含需要应用于 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())
您可以找到更新的 fiddle here。
reduce 只是一种更好、更通用的方法:
var allFilters = result
.filter(filters[0])
.filter(filters[1])
.filter(filters[2]);
在您调用 toArray 或 forEach 之前,Lazy.js 不会调用过滤器。我把一些日志放在 this example.
我有一个数组,其中包含需要应用于 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())
您可以找到更新的 fiddle here。
reduce 只是一种更好、更通用的方法:
var allFilters = result
.filter(filters[0])
.filter(filters[1])
.filter(filters[2]);
在您调用 toArray 或 forEach 之前,Lazy.js 不会调用过滤器。我把一些日志放在 this example.