JSFiddle - React, Tailwind, and code Playground

by Md. Atiquzzaman Soikat

JavaScript

/* Higher Order Function */

const multiplyByTwo = function(number) {
  return number * 2;
}

const multiplyByFour = function(number) {
  return number * 4;
}

const multiplyArray = function(array, fn) {
  return array.map(item => fn(item))
}

const multiplyArrayByTwo = multiplyArray(multiplyByTwo)
const multiplyArrayByFour = multiplyArray(multiplyByFour)


//console.log(multiplyArrayByTwo)
//console.log(multiplyArrayByFour)

function evaluatesToFive(num, fn) {
  return fn(num) === 5;
}

function divideByTwo(num) {
  return num / 2;
}

//console.log(evaluatesToFive(10, divideByTwo))
//console.log(evaluatesToFive(20, divideByTwo))

function multiplyBy(num1) {
  return function(num2) {
    return num1 * num2;
  };
}

const multiplyByThree = multiplyBy(3);
const multiplyByFive = multiplyBy(5);

//console.log(multiplyByThree(3))
//console.log(multiplyByFive(5))

// we will validate a object using higher order function

const newUser = {
  age: 24,
  password: 'some long password',
  agreeToTerms: true,
};

function oldEnough(user) {
  return user.age >= 18;
}

function passwordLongEnough(user) {
	return user.password.length >= 8;
}

function agreeToTerms(user){
	return user.agreeToTerms === true;
}

function validateObject(object, ...tests) {
	for (let i = 0; i < tests.length; i++) {
    if (tests[i](object) === false) {
      return false;
    }
  }
  return true;
}

const user1 = {
age: 20,
password: 'password',
agreeToTerms: false,
}

function createValidator(...tests) {
	return function(object){
   for (let i = 0; i < tests.length; i++) {
    if (tests[i](object) === false) {
      return false;
    }
  }
  return true;  
  }
}

const userValidator = createValidator(
oldEnough, passwordLongEnough, agreeToTerms
)

console.log(userValidator(user1))
console.log(userValidator(newUser))