- Do you have an Github account ? If not create one.
- Install required tools
- Latest Git Client
- gpg tools
# Ubuntu
sudo apt-get install gpa seahorse
# MacOS with https://brew.sh/
# Ubuntu
sudo apt-get install gpa seahorse
# MacOS with https://brew.sh/
| const pipe = (functions, ...args) => ( | |
| functions.reduce( | |
| (prev, next) => Array.isArray(prev) ? next(...prev) : next(prev), | |
| args | |
| ) | |
| ); | |
| pipe([Math.abs, Math.floor, val => -val], 4.20); // = -4 | |
| pipe([(a, b) => a - b, Math.abs], 5, 10); // = 5 |
| const bifurcateBy = (predicate, list) => | |
| list.reduce((acc, val, i) => ( | |
| acc[predicate(val, i) ? 0 : 1].push(val), acc), | |
| [[], []] | |
| ); | |
| bifurcateBy(val => val > 0, [-1, 2, -3, 4]); | |
| // = [[2, 4], [-1, -3]] |
| const findKey = (predicate, index) => Object | |
| .keys(index) | |
| .find(key => predicate(index[key], key, index)); | |
| findKey( | |
| car => !car.available, | |
| { | |
| tesla: { available: true }, | |
| ford: { available: false }, | |
| gm: { available: true } |
| const descending = (fn) => (a, b) => { | |
| const valA = fn(b); | |
| const valB = fn(a); | |
| return valA < valB ? -1 : valA > valB ? 1 : 0; | |
| } | |
| const byPrice = descending(val => val.price); | |
| [{ price: 300 }, { price: 100 }, { price: 200 }].sort(byPrice); | |
| // = [{ price: 300 }, { price: 200 }, { price: 100 }] |
| const ascending = (fn) => (a, b) => { | |
| const valA = fn(a); | |
| const valB = fn(b); | |
| return valA < valB ? -1 : valA > valB ? 1 : 0; | |
| } | |
| const byPrice = ascending(val => val.price); | |
| [{ price: 300 }, { price: 100 }, { price: 200 }].sort(byPrice); | |
| // = [{ price: 100 }, { price: 200 }, { price: 300 }] |
| const sumBy = (fn, list) => | |
| list.reduce((prev, next) => prev + fn(next), 0); | |
| sumBy(product => product.price, [ | |
| { name: 'pizza', price: 10 }, | |
| { name: 'pepsi', price: 5 }, | |
| { name: 'salad', price: 5 }, | |
| ]); // = 20 |
| const dropWhile = (pred, list) => { | |
| let index = 0; | |
| list.every(elem => { | |
| index++; | |
| return pred(elem); | |
| }); | |
| return list.slice(index-1); | |
| } | |
| dropWhile(val => (val < 5), [1,2,3,4,5,6,7]); // = [5,6,7] |
| const distance = ([x0, y0], [x1, y1]) => ( | |
| Math.hypot(x1 - x0, y1 - y0) | |
| ); | |
| distance([0, 1], [5, 4]); // = 5.8309518948453 |
| const recoverWith = async (defaultValue, fn, ...args) => { | |
| try { | |
| const result = await fn(...args); | |
| return result; | |
| } catch (_e) { | |
| return defaultValue; | |
| } | |
| } | |
| recoverWith('A', val => val, 'B'); // = B |