functioner
Version:
A node.js module containing a set of higher order functions
188 lines (147 loc) • 4.21 kB
JavaScript
'use strict';
var f = require('./functioner.js').math;
var numbers = [0, 1, 2, 3, 4];
var scaled = numbers.map(f.scale(0, 4, 0, 1));
var add2 = numbers.map(f.add(2));
var clamped = numbers.map(f.clamp(1, 3));
console.log(clamped);
// greaterThan
var numbers = [0, 1, 2, 3, 4, 5, 6];
var gt3 = numbers.filter(f.gt(3));
// console.log(gt3);
// greaterThanOrEqualTo
var numbers = [0, 1, 2, 3, 4, 5, 6];
var gte3 = numbers.filter(f.gte(3));
// console.log(gte3);
// lessThan
var numbers = [0, 1, 2, 3, 4, 5, 6];
var lt3 = numbers.filter(f.lt(3));
// console.log(lt3);
// lessThanOrEqualTo
var numbers = [0, 1, 2, 3, 4, 5, 6];
var lte3 = numbers.filter(f.lte(3));
// console.log(lte3);
// equalTo
var numbers = [0, 1, 0, 1, 0, 1];
var eq0 = numbers.filter(f.eq(0));
// console.log(eq0);
var f = require('./functioner.js').math;
// add
var numbers = [0, 1, 2, 3, 4, 5, 6];
var add2 = numbers.map(f.add(2));
// console.log(add2);
// subtract
var numbers = [0, 1, 2, 3, 4, 5, 6];
var sub2 = numbers.map(f.subtract(2));
// console.log(sub2);
// divide
var numbers = [1, 2, 3, 4];
var div2 = numbers.map(f.divide(2));
// console.log(div2);
// multiply
var numbers = [0, 1, 2, 3];
var mult5 = numbers.map(f.multiply(5));
// console.log(mult5);
// accessor
var people = [
{name: 'Alex', sex: 'f'},
{name: 'Bob', sex: 'm'},
{name: 'Carla', sex: 'f'},
{name: 'Dan', sex: 'm'}
];
var names = people.map(f.accessor('name'));
// console.log(names);
var f = require('./functioner.js').assert;
// has
var people = [
{name: 'Alex', sex: 'f'},
{name: 'Bob', sex: 'm', age: 46},
{name: 'Carla', sex: 'f'},
{name: 'Dan', sex: 'm', age: 25}
];
var hasAge = people.filter(f.has('age'));
// console.log(hasAge);
var millinials = people
.filter(f.has('age'))
.filter(f.compose(f.between(21, 40), f.accessor('age')));
console.log(millinials);
// index
var matrix = [[0, 1, 2], [3, 4, 5], [6, 7, 8]];
var firstCol = matrix.map(f.index(0));
// console.log(firstCol);
// includes
var matrix = [[0, 1, 2], [3, 4, 5], [6, 7, 8]];
var rowsWith4 = matrix.filter(f.includes(4));
// console.log(rowsWith4);
// contains
var strings = ['hey', 'how', 'are', 'you', 'doing'];
var os = strings.filter(f.contains('o'));
// console.log(os);
// match
var strings = ['hey', 'how', 'are', 'you', 'doing'];
var os = strings.filter(f.match(/.o/));
// console.log(os);
// positive
var numbers = [0, -1, 2, -3, 4, -5, 6];
var positives = numbers.filter(f.positive);
// console.log(positives);
// negative
var numbers = [0, -1, 2, -3, 4, -5, 6];
var negatives = numbers.filter(f.negative);
// console.log(negatives);
// zero
var numbers = [0, -1, 0, -0, 4, -5, 6];
var zeros = numbers.filter(f.zero);
// console.log(zeros);
// infinity
var numbers = [0, 1, 2, 1/0];
var infinites = numbers.filter(f.infinity);
// console.log(infinites);
// finite
var numbers = [0, 1, 2, 1/0];
var finites = numbers.filter(f.finite);
// console.log(finites);
// between
var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9];
var between3_7 = numbers.filter(f.between(3, 7));
// console.log(between3_7);
// even
var numbers = [0, 1, 2, 3, 4, 5, 6];
var evens = numbers.filter(f.even);
// console.log(evens);
// odd
var numbers = [0, 1, 2, 3, 4, 5, 6];
var odds = numbers.filter(f.odd);
// console.log(odds);
// caeser
// var strings = ['my', 'secret', 'messages'];
// var secret = strings.map(f.caesar(13));
// console.log(secret);
// type
var types = ['abc', '123', 123, 1.23, {}, ['a'], true, false];
var iters = types.filter(f.type('iterable'));
// console.log(iters);
// clamp
// var numbers = [-3, 1, 2, 6, 8, 10];
// var clamped = numbers.map(f.clamp(2, 6));
// console.log(clamped);
// scale
// var numbers = [0, 1, 2, 3, 4, 5];
// var scaled = numbers.map(f.scale(1, 4, 0, 1));
// console.log(scaled);
var numbers = [0, 1, 2, 3, 4, 5];
var between1and4 = numbers.filter(f.between(1, 4));
console.log(between1and4);
// sum
var sumTo = f.sum(f.add(1));
// the sum of the first 100 whole numbers
// console.log(sumTo(100));
// compose
var sumBy = f.compose(f.sum, f.add);
var sumTo = sumBy(1);
// console.log(sumTo(100));
// pow
var cube = f.pow(3);
// console.log(cube(2));
// print
// [1, 2, 3].forEach(f.print);