diff --git a/nunjucks/src/filters.js b/nunjucks/src/filters.js index 84bffa04..a1e3b880 100644 --- a/nunjucks/src/filters.js +++ b/nunjucks/src/filters.js @@ -2,6 +2,7 @@ var lib = require('./lib'); var r = require('./runtime'); +var tests = require('./tests'); var exports = module.exports = {}; @@ -266,6 +267,16 @@ function random(arr) { exports.random = random; +function reject(arr, testName = 'truthy', secondArg) { + const test = tests[testName] || tests.falsy; + + return arr.filter(function applyToTest(item) { + return test(item, secondArg) === false; + }); +} + +exports.reject = reject; + function rejectattr(arr, attr) { return arr.filter((item) => !item[attr]); } diff --git a/tests/filters.js b/tests/filters.js index 00e7d3c9..52e0bef4 100644 --- a/tests/filters.js +++ b/tests/filters.js @@ -490,6 +490,22 @@ finish(done); }); + it('reject', function(done) { + var context = { + numbers: [0, 1, 2, 3, 4, 5] + }; + + equal('{{ numbers | reject("odd") | join }}', context, '024'); + + equal('{{ numbers | reject("even") | join }}', context, '135'); + + equal('{{ numbers | reject("divisibleby", 3) | join }}', context, '1245'); + + equal('{{ numbers | reject() | join }}', context, '0'); + + finish(done); + }); + it('rejectattr', function(done) { var foods = [{ tasty: true