具有多种功能的 Lodash 过滤器
Lodash Filter with Multiple Functions
试图找出最干净的方法来执行以下操作:
我过滤了一些结果两次,我正在使用 Lodash 过滤器来这样做。目前,我的代码如下所示:
resultsOne = _.filter(results, functionOne);
resultsTwo = _.filter(resultsOne, functionTwo);
我意识到我可以组合 functionOne 和 functionTwo,但我喜欢将它们分开以便于阅读。使用 Lodash 或普通 ol' Javascript?
是否有使用两个函数进行过滤的最佳实践
谢谢!
使用 lodash
您可以使用 _.overEvery()
创建过滤函数,并在过滤器中使用它:
var ff = _.overEvery([functionOne, functionTwo]);
var filteredResults = results.filter(ff)
原版 JS
创建一个过滤函数数组,并使用 Array#every:
将它们应用于一个值
var filters = [functionOne, functionTwo];
filterdResults = results.filter(function(item) {
return filters.every(function(ff) {
return ff(item);
});
});
也许是这样的?
results.filter(functionOne).filter(functionTwo);|
您可以使用 Lodash 将这两个过滤器与 _(…)
constructor 链接在一起,或者更准确地说,wrapper:
let filtered = _(results).filter(functionOne).filter(functionTwo).value()
_(…)
包装器包装了一个值,在本例中为数组,并允许它与其他函数链接,例如 _.filter
。该数组将作为要过滤的数组传递,函数作为谓词传递。最后的 value()
调用解包值。
当然,对于 ES5,此操作变得极其琐碎,而 Lodash 会造成不必要的混乱:
let filtered = results.filter(functionOne).filter(functionTwo);
这减少了对内置方法的库依赖,并且无需包装器即可轻松链接。
你甚至可以使用 vanilla JavaScript 来组合它们:
let filtered = results.filter(result => functionOne(result) && functionTwo(result))
这会检查这两个函数。这类似于 Ori Diori 建议的 _.overEvery
,后者将任意数量的谓词组合成单个过滤谓词。
试图找出最干净的方法来执行以下操作:
我过滤了一些结果两次,我正在使用 Lodash 过滤器来这样做。目前,我的代码如下所示:
resultsOne = _.filter(results, functionOne);
resultsTwo = _.filter(resultsOne, functionTwo);
我意识到我可以组合 functionOne 和 functionTwo,但我喜欢将它们分开以便于阅读。使用 Lodash 或普通 ol' Javascript?
是否有使用两个函数进行过滤的最佳实践谢谢!
使用 lodash
您可以使用 _.overEvery()
创建过滤函数,并在过滤器中使用它:
var ff = _.overEvery([functionOne, functionTwo]);
var filteredResults = results.filter(ff)
原版 JS
创建一个过滤函数数组,并使用 Array#every:
将它们应用于一个值var filters = [functionOne, functionTwo];
filterdResults = results.filter(function(item) {
return filters.every(function(ff) {
return ff(item);
});
});
也许是这样的?
results.filter(functionOne).filter(functionTwo);|
您可以使用 Lodash 将这两个过滤器与 _(…)
constructor 链接在一起,或者更准确地说,wrapper:
let filtered = _(results).filter(functionOne).filter(functionTwo).value()
_(…)
包装器包装了一个值,在本例中为数组,并允许它与其他函数链接,例如 _.filter
。该数组将作为要过滤的数组传递,函数作为谓词传递。最后的 value()
调用解包值。
当然,对于 ES5,此操作变得极其琐碎,而 Lodash 会造成不必要的混乱:
let filtered = results.filter(functionOne).filter(functionTwo);
这减少了对内置方法的库依赖,并且无需包装器即可轻松链接。
你甚至可以使用 vanilla JavaScript 来组合它们:
let filtered = results.filter(result => functionOne(result) && functionTwo(result))
这会检查这两个函数。这类似于 Ori Diori 建议的 _.overEvery
,后者将任意数量的谓词组合成单个过滤谓词。