Native Array Methods

by LyndseyB

Babel + JSX

const forEach = (array, fn) => {
	for(let i = 0, len = array.length; i < len; i++) {
  	fn(array[i], i, array);
  }
};

const filter = (array, fn) => {
	const filtered = [];
	for(let i = 0, len = array.length; i < len; i++) {
  	if(fn(array[i], i, array)) {
    	filtered.push(array[i]);
    }
  }
  return filtered;
};

const find = (array, fn) => {
	for(let i = 0, len = array.length; i < len; i++) {
  	if(fn(array[i], i, array)) {
    		return array[i];
    }
  }
};

const findIndex = (array, fn) => {
	for(let i = 0, len = array.length; i < len; i++) {
  	if(fn(array[i], i, array)) {
    		return i;
    }
  }
};

const every = (array, fn) => {  
	for(let i = 0, len = array.length; i < len; i++) {
  	if(!fn(array[i], i, array)) {
    	return false;
    }
  }
  return true;
};

const reduce = (array, fn, accumulator) => {
	for(let i = 0, len = array.length; i < len; i++) { 	
  	accumulator = fn(accumulator, array[i], array);    
    fn(accumulator, array[i], array);    
  }
  return accumulator;
};

const map = (array, fn) => {
	const mapped = [];
	for(let i = 0, len = array.length; i < len; i++) {
  	mapped.push(fn(array[i], i, array));
  }
  
  return mapped;
};

const array = [1, 2, 3, 4, 5];

const divisibleByTwo = filter(array, (item, index) => {
	return item % 2 === 0;
});

const findGreaterThan3 = find(array, item => item > 3);
const findGreaterThan3Index = findIndex(array, item => item > 3);
const singleDigits = every(array, item => item < 10);
const allDivisibleByTwo = every(array, item => item % 2 === 0);
const sumReduce = reduce(array, (acc, cur) => acc + cur, 1);
const doubleAll = map(array, item => item * 2);

console.log(doubleAll);