Learning notes. Video.
Less than:
If you use 'ramda', you maybe know 'lt, gt'..
R.lt(2, 1); //=> false
Is '2' less than '1' , the result is false. We can see that the data is actually come first which is 2.
Normally in FP, we want data come last. What we can do is using 'flip' from 'crocks.js'.
const {flip} = require('crocks') const {lt} = require('ramda') // isLessTen :: Number -> Boolean const isLessTen = flip(lt, 10) isLessThen(9) // true
If/Else:
const diff10 = v => { let result = null; if (v < 10) { result = v - 10 } else { result = v + 10 } }
We can use 'ifElse' from 'crocks.js':
const {not, ifElse} = require('crocks'); const {add, lt} = require('ramda'); const declarative = ifElse( not(flip(lt, 10)), // if the given number is greater than 10 add(10), // then plus 10 add(-10) // go negitive )
or/and:
/** * Or && And */ // Just check one object has length prop is not enough // Because Array has length, function has length // Array is also object const _hasLengthProp = x => (isObject(x) && x.length !== undefined) || isArray(x); // hasLengthProp :: a -> Boolean const hasLengthProp = or(isArray, and(isObject, hasProp('length'))); log(hasLengthProp([])) // true
[100] === [100]?
The Answer is : false
JS consider each [] is a new Object.
In this case, we can use 'propEq' from 'crocks.js' to save us some safe checking:
const _aIs100A = x => isObject(x) && x.a === [100]; log( _aIs100A({a: [100]}) ) // false, because it consider [100] is a new object const aIs100A = and(isObject, propEq('a', [100])) log( aIs100A({a: [100]}) // true )
ES5 way to check Array is typeof Array, and Date is typeof Date:
const _isArray = x => Object.prototype.toString.call(x) === '[object Array]';
const _isDate = x => Object.prototype.toString.call(x) === '[object Date]';