Higher order function

Pass function in functions:

Example 1:

function example(callback) {
    callback(1); -> Output 1
    callback(2); -> Output 2
    callback(3); -> Output 3
}

example(function(arg){
    console.log(arg);
}

Example 2:

function filterArray(array, predicate){
    var result = [];
    for (var i.....i++) {
        var item = array[i];
        if(!predicate(item)){
            continue;
        }
        result.push(item);
    }
    return result;
}

var array = [1,2,3,4,5,6,7]'
var result = filterArray(array, function(item){
    return item < 4;
});

console.log(result); -> 1,2,3

Example 3:

function lessThanFilter(lessThen){
    return function(item){
        return item < lessThan;
    }
}

var lessThanFive = lessThanFilter(5);
console.log(lessThanFive(3), lessThanFive(10)); -> True and false

Example 4:

function add( a, b ) {
  return a + b;
}

function partial( fn, a ) {
  return function( b ) {
    return fn( a, b );
  };
}

var add5 = partial( add, 5 );

console.log(add5(4)); //9

More examples:

Eg:

var arr1 = [1,2,3];
console.log(arr1);

var arr2 = [];

for (var i = 0; i < arr1.length; i++) {
    arr2.push(
        arr1[i * 2]
        );
};

console.log(arr2);

This can be improve by using functional programming:

function mapForEach(arr, fn){
    var newArr = [];
    for (var i = 0; i < arr1.length; i++) {
    newArr.push(
        fn(arr[i])
        )
    };
    return newArr;
}

var arr2 = mapForEach(arr1, function(item){
    return item * 2;
});

If we want to create our custom limiter:

var checkPastLimit - function(limiter, item){
    return item > limiter;
}

var arr4 = mapForEach(arr1, checkPastLimit.bind(this, 1)); //1 is our limiter which is present using the bind 

//We can create a function that just takes the limiter:

var checkPastLimitSimplified = function(limiter){
    return function(limiter, item){
        return item > limiter;
    }.bind(this,limiter);
}

var arr5 = mapForEach(arr1, checkPastLimitSimplified(2));

results matching ""

    No results matching ""