Skip to content

re: The Power of Higher Order Functions in JavaScript (With examples and use cases) VIEW POST


i also suggest a re write to this functionality of the last pass

filterMaleFrogs = function (frog) {
   return frog.gender === 'Male'

filterAdultFrogs = function (frog) {
   return frog.age >= 10

filterFrogNamesThatStartWithHippo = function (frog) {

filterGmailEmails = function (frog) {
   return /

function composeFrogFilterersModified(...fns) {

   return function (frogs) {
      return frogs.filter(

function combineFilters(fns) {
   return function (frog) {
      return fns.reduce(function (accumulatedFilter, currentFilter) {
         if(accumulatedFilter === false) {
            return false;

         return !!currentFilter(frog);

      }, true);

const applyFrogFilterersComposedAgain = composeFrogFilterersModified(

const allFilteredFrogsModified = applyFrogFilterersComposedAgain(combinedFrogsList);
console.log('all filtered frogs: ', allFilteredFrogsModified);

from my understanding, this will only go once per frog and not create array.filter 4 times
please correct me if iam wrong or missed something on your implementation


I love the use of reduce with collections of functions!
+1 @serjoa 🦄


Hi SerjoA, thank you for the suggestion and the workaround!

I will edit the post and swap out the current code example with the example you provided because its correct.

I'm going to make a slight modification to your combineFilters function to run this instead:

function combineFilters(...fns) {
   return function (frog) {
     for (let i = 0; i < fns.length; i++) {
       const filter = fns[i]
       const passes = filter(frog)
       if (passes) {
       } else {
         return false
     return true

This is a slightly more optimized version which reduces the amount of iterations as much as possible.

Thank you!

code of conduct - report abuse