JavaScript
// Sum Numbers over an array
const sum = array => array.reduce((acum, number) => {
return acum + number;
}, 0);
console.log('01', { sum: sum([ 1, 5, 9 ]) });
// Sum Numbers multiplied by a factor
const sumProduct = array => array.reduce((acum, pair) => {
const [ number, factor ] = pair;
return acum + number * factor;
}, 0);
console.log('02', { sumProduct: sumProduct([ [ 1, 1 ] , [ 5, 3 ], [ 9, 2 ] ]) });
// Get the max value
const maxNumber = array => array.reduce((acum, number) => {
if (!acum) return number;
if (acum < number) return number;
return acum;
}, null);
console.log('03', { maxNumber: maxNumber([ 1, 5, 9 ]) });
// Implement "map" function over an array
const map = (array, fn) => array.reduce((acum, elem) => {
return [ ...acum, fn(elem) ];
}, []);
console.log('04', { map: map([ 1, 2, 3 ], x => x * 2) });
// Implement "filter" function over an array
const filter = (array, fn) => array.reduce((acum, elem) => {
if (!fn(elem)) return acum;
return [ ...acum, elem ];
}, []);
console.log('05', { filter: filter([ 1, 2, 3 ], x => x >= 2) });
// Filter (first) and then Map over the array
const filterMap = (array, fnFilter, fnMap) => array.reduce((acum, elem) => {
if (!fnFilter(elem)) return acum;
return [ ...acum, fnMap(elem) ];
}, []);
console.log('06', { filterMap: filterMap([ 1, 2, 3 ], x => x >= 2, x => x * 2) });
// Implement "flatMap" function over an array
const flatMap = (array, fn) => array.reduce((acum, elem) => {
if (Array.isArray(elem)) return [ ...acum, ...elem.map(fn) ];
return [ ...acum, fn(elem) ];
}, []);
console.log('07', { flatMap: flatMap([ [ 1, 2 ], 3, [ 4, 5 ] ], x => x * 2) });
// Implement "unique" function over an array
const unique = array => array.reduce((acum, elem) => {
if (acum.includes(elem)) return acum;
return [ ...acum, elem ];
}, []);
console.log('08', { unique: unique([ 1, 1, 3, 5, 3, 9 ]) });
// Implement "sort" function over an array, even with non-unique elements
const sort = array =>...