JSFiddle - React, Tailwind, and code Playground

by tobyworth

JavaScript

function forEach(arr, action){
	for(let i=0; i<arr.length; i++){
  	action(arr[i]);
  }
}

function reduce(func, base, arr){	
	forEach(arr, function(elm){
  		base += func(elm) ? 1 : 0;
  });
  
  return base;
}


let isZero = () => {
	return function(element){
  	return 0 === element;
  }
}

let isNum = (x) => {
  return function(element){
  	return x === element;
  }
}

let isMultiple = (x) => {
	return function(element){
  	return element % x === 0;
  }
}

let isSharedMultiple = (x, y) => {
	return function(element){
  	return element % x === 0 && element % y === 0;
  }
}

function count(func, arr){
	return reduce(func, 0, arr);
}

function countZeroes(arr){
	return count(isZero(), arr);
}

alert(countZeroes([0,1,2,3,0,0]));	// 3
alert(countZeroes([1,2,3]));	// 0

alert(count(isNum(2), [1,2,3]));	// 1
alert(count(isMultiple(2), [1,2,3,4]));	// 2
alert(count(isSharedMultiple(2,4), [1,2,3,4]));	// 1
alert(count(isSharedMultiple(3,9), [1,2,3,4,9,27]));	// 1

//alert(count([1,2,3,4], isMultiple(2));