@hamlab/data-transformations v1.0.29
data-transformations
Description
A practical functional library for data transformations in JavaScript.
Take a look at the interactive documentation
Installation
To use with node:
$ npm install @hamlab/data-transformationsThen in the console:
const DT = require('@hamlab/data-transformations');
const { map } = require('@hamlab/data-transformations/map');
...Documentation
Table of Contents
- bind
- complement
- compose
- composeAsync
- curry
- curryN
- filter
- Transducer
- Collection
- Into
- into
- is
- map
- pipe
- pipeAsync
- reduce
- reduced
- take
- tap
- transduce
bind
[Curried function]
Creates a function that is bound to a context.
Note: bind does not provide the additional argument-binding capabilities of
Function.prototype.bind.
Parameters
Examples
const log = bind(console.log, console);
pipe(inc, log, double)(2); //=> 6
// logs: 3Returns Function A function that will execute in the context of thisObj.
complement
Takes a function f and returns a function g such that:
applying
gto zero or more arguments will give true if applying the same arguments tofgives a logical false value; andapplying
gto zero or more arguments will give false if applying the same arguments tofgives a logical true value.
Parameters
fnFunction
Examples
const isEven = (n) => n % 2 === 0;
const isOdd = complement(isEven);
isOdd(21); //=> true
isOdd(42); //=> falseReturns Function
compose
- See: pipe
Performs right-to-left function composition. The rightmost function may have any arity; the remaining functions must be unary.
Parameters
functions...Function
Examples
const inc = x => x + 1:
const negate = x => -x;
var f = compose(inc, negate, Math.pow);
f(3, 4); // -(3^4) + 1Returns Function a function that represents the composition of the arguments
composeAsync
- See: pipeAsync
Performs right-to-left function composition. The rightmost function may have any arity; the remaining functions must be unary. If any function returns a promise, it chains remaining ones
Parameters
functions...Function
Examples
var head = ([h]) => h;
var process = (a) => Promise.resolve(a);
var promiseAll = Promise.all.bind(Promise);
var f = composeAsync(head, promiseAll, process);
await f([1, 2]); // Promise.all([process(1), process(2)])[0] => 1Returns Function a function that represents the composition of the arguments
curry
- See: curryN
Returns a curried equivalent of the provided function. The curried
function has two unusual capabilities. First, its arguments needn't
be provided one at a time. If f is a ternary function and g is
curry(f), the following are equivalent:
g(1)(2)(3)g(1)(2, 3)g(1, 2)(3)g(1, 2, 3)
Parameters
fnFunction The function to curry.initialArgs...any The fn initial arguments.
Examples
var addFourNumbers = function(a, b, c, d) {
return a + b + c + d;
};
var curriedAddFourNumbers = curry(addFourNumbers);
var f = curriedAddFourNumbers(1, 2);
var g = f(3);
g(4); //=> 10Returns Function A new, curried function.
curryN
- See: curry
Returns a curried equivalent of the provided function, with the
specified arity. The curried function has two unusual capabilities.
First, its arguments needn't be provided one at a time. If g is
curryN(3, f), the following are equivalent:
g(1)(2)(3)g(1)(2, 3)g(1, 2)(3)g(1, 2, 3)
Parameters
arityNumber The arity for the returned function.fnFunction The function to curry.initialArgs...any The function initial arguments.
Examples
var addFourNumbers = function(a, b, c, d = 0) {
return a + b + c + d;
};
var curriedAddFourNumbers = curryN(3, addFourNumbers);
var f = curriedAddFourNumbers(1, 2);
f(3); //=> 6Returns Function A new, curried function.
filter
- See: transduce
[Curried function]
Returns a new list containing only those items that match a given predicate function. The predicate function is passed: (value, index, collection). in the case of filtering and object, the predicate function is passed: (value, key, collection).
Note that filter does not skip deleted or unassigned indices, unlike the native
Array.prototype.filter method. For more details on this behavior, see:
Array.prototype.filter
Acts as a transducer if a transformer is given as second parameter.
Parameters
fnFunction The function called per iteration.collectionCollection? The collection to iterate over.
Examples
const isEven = (n) => n % 2 === 0;
const isValueEven = ([k, v]) => isEven(v)
const isVowel = (c) => /[aeiou]/.test(c);
filter(isVowel, 'string'); //=> 'i'
filter(isEven, [1, 2, 3]); //=> [2]
filter(isEven, Set[1, 2, 3]); //=> Set[2]
filter(isEven, function* () { yield* [1, 2, 3]}); //=> [2]
filter(isEven, { a: 1, b: 2 }); //=> { b: 2 }
filter(isValueEven, Map{ a: 1, b: 2 }); //=> Map{ b: 2 }Returns (Collection | Function) The new filtered array.
Transducer
Type: Object
Properties
nullFunction@@transducer/init- Function: () => any, Hook called at the beginning to compute the initial statenullFunction@@transducer/result- Function: (state) => any, Hook called when the result is computednullFunction@@transducer/step- Function: (state, value, index, collection) => any, Hook called at every iteration
Collection
Type: (Array | Object | Transducer | Set | Map | string | Iterator | GeneratorFunction | Generator | Iterable)
Into
Type: Object
Properties
arrayfunction (Function, Collection): Array? Function: (value, index, collection, accumulator) => any, Merge strategy: Array.pushstringfunction (Function, Collection): string? Function: (value, index, collection, accumulator) => any, Merge strategy: concatenationnumberfunction (Function, Collection): number? Function: (value, index, collection, accumulator) => any, Merge strategy: last returned value becomes the accumulatorsetfunction (Function, Collection): Set? Function: (value, index, collection, accumulator) => any, Merge strategy: Set.addmapfunction (Function, Collection): Map? Function: ([key, value], index, collection, accumulator) => [any, any], Merge strategy: Map.addobjectfunction (Function, Collection): Object? Function: ([key, value], index, collection, accumulator) => [any, any], Merge strategy: object assignation
into
Transforms the items of the iterable with the transducer and appends the transformed items to the accumulator using an appropriate iterator function based on the accumulator type.
The transducer function takes 4 params: (value, index, collection, accumulator). Then value parameter is a pair [key, value] when the accumulator is an Object or a Map.
In the case the accumulator is a number (into.number), there is no merge strategy and just returns what the transducer returns
The iteration is performed with reduce after initializing the transducer.
All properties are curried.
Type: Into
Examples
var value = ([k, v]] => v
var isEven = (x) => x % 2 === 0
var isVowel = (x) => /aeiou/.test(x)
var isObject = (x) => typeof x === 'object'
var toUppercase = (x) => x.toUppercase()
var addAccumulator = (value, index, collection, accumulator) => value + accumulator
var pairById = (x) => [x.id, x]
into.array(compose(map(value), filter(isEven)), {a: 1, b: 2}) // [2]
into.string(compose(filter(isVowel), map(toUppercase)), 'string') // 'I'
into.number(map(addAccumulator), [1, 2, 3]) // 1 + 2 + 3 = 6
into.object(
compose(filter(isObject), map(pairById)),
[1, { id: '1-2-3', value: 10 }]
) // { '1-2-3': { id: '1-2-3', value: 10 } }is
[Curried function]
See if an object (val) is an instance of the supplied constructor.
This function will check up the inheritance chain, if any.
- Additionally, it has the following methods for nicer and more semantic type checking: array - function - functor - filterable - generator - iterator - map - object (strict checking) - promise - set - string - thenable - transducer - type - strict - nil - not (negates any of the previous ones)
- @func
Parameters
ctorObject A constructorvalany The value to test
Properties
arrayfunction (any): boolean? Checks if is an Arrayfunctionfunction (any): boolean? Checks if is type functionfunctorfunction (any): boolean? Checks if it has a map methodfilterablefunction (any): boolean? Checks if it has a filter methodgeneratorfunction (any): boolean? Checks if it is a generator functioniteratorfunction (any): boolean? Checks if it has [Symbol.iterator] methodmapfunction (any): boolean? Checks if it is a Map or an instance of a Mapobjectfunction (any): boolean? Checks if the constructor equals to Object (if it is strictly an object)promisefunction (any): boolean? Checks if it is a Promise or an instance of a Promisesetfunction (any): boolean? Checks if it is a Set or an instance of a Setstringfunction (any): boolean? Checks if it is boolean typethenablefunction (any): boolean? Checks if it has a then methodtransducerfunction (any): boolean? Checks if it is an object that follows the transducer protocoltypefunction (string, any): boolean? Checks if the type matchesstrictfunction (Function, any): boolean? Checks if the constructor function matchesnilfunction (any): boolean? Checks if it is null or undefinednotObject? negates the following methodnot.arrayfunction (any): boolean? Checks if is not an Arraynot.functionfunction (any): boolean? Checks if is not type functionnot.functorfunction (any): boolean? Checks if it has not a map methodnot.filterablefunction (any): boolean? Checks if it has not a filter methodnot.generatorfunction (any): boolean? Checks if it is not a generator functionnot.iteratorfunction (any): boolean? Checks if it has not [Symbol.iterator] methodnot.mapfunction (any): boolean? Checks if it is not a Map nor an instance of a Mapnot.objectfunction (any): boolean? Checks if the constructor not equals to Object (if it is strictly not an object)not.promisefunction (any): boolean? Checks if it is not a Promise nor an instance of a Promisenot.setfunction (any): boolean? Checks if it is not a Set nor an instance of a Setnot.stringfunction (any): boolean? Checks if it is not boolean typenot.thenablefunction (any): boolean? Checks if it has not a then methodnot.transducerfunction (any): boolean? Checks if it is not an object that follows the transducer protocolnot.typefunction (string, any): boolean? Checks if the type do not matches matchesnot.strictfunction (Function, any): boolean? Checks if the constructor function do not matchesnot.nilfunction (any): boolean? Checks if it is not null or undefined
Examples
is.object([]); => false
is(Object, []); //=> true
is(Object, {}); //=> true
is(Number, 1); //=> true
is(Object, 1); //=> false
is(String, 's'); //=> true
is(String, new String('')); //=> true
is(Object, new String('')); //=> true
is(Object, 's'); //=> false
is(Number, {}); //=> false
is.function(() => {}); => true
is.not.function(() => {}); => falseReturns Boolean
map
- See: transduce
[Curried function]
Returns a new Iterable, constructed by applying the supplied function to every element of the supplied list.
When mapping an object, the function mapper accepts (value, key, object) In any other case, the mapper function accepts (value, index, collection). The value comes from the iterator of the collection.
Note: map does not skip deleted or unassigned indices (sparse arrays), unlike the
native Array.prototype.map method. For more details on this behavior, see:
Array.prototype.map
Acts as a transducer if a transformer is given as second parameter.
Parameters
fnFunction The function to be called on every element of the inputIterable.collectionCollection? The Iterable to be iterated over.
Examples
const toUpperCase = (x) => x.toUpperCase();
const double = (x) => x * 2;
const doubleValue = ([k, v]) => [k, v * 2];
map(toUpperCase, 'aeiou'); //=> 'AEIOU'
map(double, [1, 2, 3]); //=> [2, 4, 6]
map(double, Set[1, 2, 3]); //=> Set[2, 4, 6]
map(double, function* () { yield* [1, 2, 3]}); //=> [2, 4, 6]
map(double, { a: 1, b: 2 }); //=> { a: 2, b: 4 }
map(doubleValue, Map{ a: 1, b: 2 }); //=> Map{ a: 2, b: 4 }Returns (Collection | Function) The new Iterable or curried function.
pipe
- See: compose
Performs left-to-right function composition. The leftmost function may have any arity; the remaining functions must be unary.
In some libraries this function is named sequence.
Parameters
functions...Function
Examples
var f = pipe(Math.pow, toString);
f(3, 4); // (3^4).toString()Returns Function a function that represents the composition of the arguments
pipeAsync
- See: composeAsync
Performs left-to-right function composition. The leftmost function may have any arity; the remaining functions must be unary. If any function returns a promise, it chains remaining ones
Parameters
functions...Function
Examples
var head = ([h]) => h;
var process = (a) => Promise.resolve(a);
var promiseAll = Promise.all.bind(Promise);
var f = pipeAsync(process, promiseAll, head);
f([1, 2]); // Promise.all([process(1), process(2)])[0] => 1Returns Function a function that represents the composition of the arguments
reduce
- See: reduced
[Curried function]
Returns a single item by iterating through the collection, successively calling the iterator function and passing it an accumulator value and the current value from the array, and then passing the result to the next call.
The iterator function receives: (acc, value, index, collection). while reducing an object
it receives: (acc, [value, key], collection).
It may use reduced to stop the iteration.
It also accepts a transducer instead of an iterator function.
Note: reduce does not skip deleted or unassigned indices (sparse arrays), unlike
the native Array.prototype.reduce method. For more details on this behavior, see:
Array.prototype.reduce
Parameters
transducerFunction The iterator function. Receives four values: the accumulator, the current element from the Iterable, the iteration index and the whole Iterable. It also accepts a Transducerinitialany The accumulator initial value.collectionCollection An Iterable parameter.
Examples
const add = (acc, act) => a + b;
reduce(add, 'normal', 'string'); //=> 'normal string'
reduce(add, 10, [1, 2, 3]); //=> 16
reduce(add, 10, Set[1, 2, 3]); //=> 16
reduce(add, 10, function* () { yield* [1, 2, 3]}); //=> 16
reduce(add, '', { a: 1, b: 2 }); //=> 'a,1b,2'
reduce(add, '', Map{ a: 1, b: 2 }); //=> 'a,1b,2'Returns any The final, accumulated value.
reduced
- See: reduce, transduce
Returns a value wrapped to indicate that it is the final value of the reduce and transduce functions. The returned value should be considered a black box: the internal structure is not guaranteed to be stable.
Parameters
stateany The final value of the reduce.
Examples
reduce(
pipe(add, ifElse(lte(10), reduced, identity)),
0,
[1, 2, 3, 4, 5]
) // 10Returns any The wrapped value.
take
[Curried function]
Returns the first n elements of the iterable.
Parameters
Examples
const names = names
take(1, names); //=> ['foo']
take(1, function* () { yield* names }); //=> ['foo']
take(1, names); //=> ['foo']
take(2, names); //=> ['foo', 'bar']
take(3, names); //=> ['foo', 'bar', 'baz']
take(4, names); //=> ['foo', 'bar', 'baz']
take(3, 'ramda'); //=> 'ram'
take(1, Map{ a: 1, b: 2 }) => [['a', 1]]
const personnel = [
'Dave Brubeck',
'Paul Desmond',
'Eugene Wright',
'Joe Morello',
'Gerry Mulligan',
'Bob Bates',
'Joe Dodge',
'Ron Crotty'
];
const takeTwo = take(2);
takeFive(personnel); //=> ['Dave Brubeck', 'Paul Desmond']Returns any
tap
[Curried function]
Runs the given function with the supplied object, then returns the object.
Acts as a transducer if a transformer is given as second parameter.
Parameters
fnFunction The function to call withx. The return value offnwill be thrown away.xany
Examples
const sayX = x => console.log('x is ' + x);
tap(sayX, 100); //=> 100
// logs 'x is 100'Returns any x.
transduce
- See: reduce, reduced, into
[Curried function]
Initializes a transducer using supplied iterator function. Returns a single item by iterating through the list, successively calling the transformed iterator function and passing it an accumulator value and the current value from the array, and then passing the result to the next call.
The iterator function receives two values: (acc, value). It will be wrapped as a
transformer to initialize the transducer. A transformer can be passed directly in place
of an iterator function. In both cases, iteration may be stopped early with the
reduced function.
A transducer is a function that accepts a transformer and returns a transformer and can be composed directly.
A transformer is an object that provides a 2-arity reducing iterator function, step, 0-arity initial value function, init, and 1-arity result extraction function, result. The step function is used as the iterator function in reduce. The result function is used to convert the final accumulator into the return type and in most cases is the identity function. The init function can be used to provide an initial accumulator, but is ignored by transduce.
The iteration is performed with reduce after initializing the transducer.
Parameters
transducerFunction The transducer function. Receives a transformer and returns a transformer.combineFunction The iterator function. Receives two values, the accumulator and the current element from the array. Wrapped as transformer, if necessary, and used to initialize the transducerinitialany The initial accumulator value.collectionCollection The Iterable to iterate over.
Examples
var t = transducers;
var inc = function(n) { return n+1; };
var isEven = function(n) { return n % 2 == 0; };
var apush = function(arr,x) { arr.push(x); return arr; };
var xf = compose(map(inc),filter(isEven));
transduce(xf, apush, [], [1,2,3,4]); // [2,4]Returns any The final, accumulated value.
bind
Creates a function that is bound to a context.
Note: bind does not provide the additional argument-binding capabilities of
Function.prototype.bind.
Parameters
Examples
const log = bind(console.log, console);
pipe(inc, log, double)(2); //=> 6
// logs: 3Returns Function A function that will execute in the context of thisObj.
complement
Takes a function f and returns a function g such that:
applying
gto zero or more arguments will give true if applying the same arguments tofgives a logical false value; andapplying
gto zero or more arguments will give false if applying the same arguments tofgives a logical true value.
Parameters
fnFunction
Examples
const isEven = (n) => n % 2 === 0;
const isOdd = complement(isEven);
isOdd(21); //=> true
isOdd(42); //=> falseReturns Function
compose
- See: pipe
Performs right-to-left function composition. The rightmost function may have any arity; the remaining functions must be unary.
Parameters
functions...Function
Examples
const inc = x => x + 1:
const negate = x => -x;
var f = compose(inc, negate, Math.pow);
f(3, 4); // -(3^4) + 1Returns Function a function that represents the composition of the arguments
composeAsync
- See: pipeAsync
Performs right-to-left function composition. The rightmost function may have any arity; the remaining functions must be unary. If any function returns a promise, it chains remaining ones
Parameters
functions...Function
Examples
var head = ([h]) => h;
var process = (a) => Promise.resolve(a);
var promiseAll = Promise.all.bind(Promise);
var f = composeAsync(head, promiseAll, process);
await f([1, 2]); // Promise.all([process(1), process(2)])[0] => 1Returns Function a function that represents the composition of the arguments
curry
- See: curryN
Returns a curried equivalent of the provided function. The curried
function has two unusual capabilities. First, its arguments needn't
be provided one at a time. If f is a ternary function and g is
curry(f), the following are equivalent:
g(1)(2)(3)g(1)(2, 3)g(1, 2)(3)g(1, 2, 3)
Parameters
fnFunction The function to curry.initialArgs...any The fn initial arguments.
Examples
var addFourNumbers = function(a, b, c, d) {
return a + b + c + d;
};
var curriedAddFourNumbers = curry(addFourNumbers);
var f = curriedAddFourNumbers(1, 2);
var g = f(3);
g(4); //=> 10Returns Function A new, curried function.
curryN
- See: curry
Returns a curried equivalent of the provided function, with the
specified arity. The curried function has two unusual capabilities.
First, its arguments needn't be provided one at a time. If g is
curryN(3, f), the following are equivalent:
g(1)(2)(3)g(1)(2, 3)g(1, 2)(3)g(1, 2, 3)
Parameters
arityNumber The arity for the returned function.fnFunction The function to curry.initialArgs...any The function initial arguments.
Examples
var addFourNumbers = function(a, b, c, d = 0) {
return a + b + c + d;
};
var curriedAddFourNumbers = curryN(3, addFourNumbers);
var f = curriedAddFourNumbers(1, 2);
f(3); //=> 6Returns Function A new, curried function.
filter
- See: transduce
Returns a new list containing only those items that match a given predicate function. The predicate function is passed: (value, index, collection). in the case of filtering and object, the predicate function is passed: (value, key, collection).
Note that filter does not skip deleted or unassigned indices, unlike the native
Array.prototype.filter method. For more details on this behavior, see:
Array.prototype.filter
Acts as a transducer if a transformer is given as second parameter.
Parameters
fnFunction The function called per iteration.collectionCollection? The collection to iterate over.
Examples
const isEven = (n) => n % 2 === 0;
const isValueEven = ([k, v]) => isEven(v)
const isVowel = (c) => /[aeiou]/.test(c);
filter(isVowel, 'string'); //=> 'i'
filter(isEven, [1, 2, 3]); //=> [2]
filter(isEven, Set[1, 2, 3]); //=> Set[2]
filter(isEven, function* () { yield* [1, 2, 3]}); //=> [2]
filter(isEven, { a: 1, b: 2 }); //=> { b: 2 }
filter(isValueEven, Map{ a: 1, b: 2 }); //=> Map{ b: 2 }Returns (Collection | Function) The new filtered array.
Transducer
Type: Object
Properties
nullFunction@@transducer/init- Function: () => any, Hook called at the beginning to compute the initial statenullFunction@@transducer/result- Function: (state) => any, Hook called when the result is computednullFunction@@transducer/step- Function: (state, value, index, collection) => any, Hook called at every iteration
Collection
Type: (Array | Object | Transducer | Set | Map | string | Iterator | GeneratorFunction | Generator | Iterable)
Into
Type: Object
Properties
arrayfunction (Function, Collection): Array? Function: (value, index, collection, accumulator) => any, Merge strategy: Array.pushstringfunction (Function, Collection): string? Function: (value, index, collection, accumulator) => any, Merge strategy: concatenationnumberfunction (Function, Collection): number? Function: (value, index, collection, accumulator) => any, Merge strategy: last returned value becomes the accumulatorsetfunction (Function, Collection): Set? Function: (value, index, collection, accumulator) => any, Merge strategy: Set.addmapfunction (Function, Collection): Map? Function: ([key, value], index, collection, accumulator) => [any, any], Merge strategy: Map.addobjectfunction (Function, Collection): Object? Function: ([key, value], index, collection, accumulator) => [any, any], Merge strategy: object assignation
into
Transforms the items of the iterable with the transducer and appends the transformed items to the accumulator using an appropriate iterator function based on the accumulator type.
The transducer function takes 4 params: (value, index, collection, accumulator). Then value parameter is a pair [key, value] when the accumulator is an Object or a Map.
In the case the accumulator is a number (into.number), there is no merge strategy and just returns what the transducer returns
The iteration is performed with reduce after initializing the transducer.
Type: Into
Examples
var value = ([k, v]] => v
var isEven = (x) => x % 2 === 0
var isVowel = (x) => /aeiou/.test(x)
var isObject = (x) => typeof x === 'object'
var toUppercase = (x) => x.toUppercase()
var addAccumulator = (value, index, collection, accumulator) => value + accumulator
var pairById = (x) => [x.id, x]
into.array(compose(map(value), filter(isEven)), {a: 1, b: 2}) // [2]
into.string(compose(filter(isVowel), map(toUppercase)), 'string') // 'I'
into.number(map(addAccumulator), [1, 2, 3]) // 1 + 2 + 3 = 6
into.object(
compose(filter(isObject), map(pairById)),
[1, { id: '1-2-3', value: 10 }]
) // { '1-2-3': { id: '1-2-3', value: 10 } }is
See if an object (val) is an instance of the supplied constructor.
This function will check up the inheritance chain, if any.
- Additionally, it has the following methods for nicer and more semantic type checking: array - function - functor - filterable - generator - iterator - map - object (strict checking) - promise - set - string - thenable - transducer - type - strict - nil - not (negates any of the previous ones)
- @func
Parameters
ctorObject A constructorvalany The value to test
Properties
arrayfunction (any): boolean? Checks if is an Arrayfunctionfunction (any): boolean? Checks if is type functionfunctorfunction (any): boolean? Checks if it has a map methodfilterablefunction (any): boolean? Checks if it has a filter methodgeneratorfunction (any): boolean? Checks if it is a generator functioniteratorfunction (any): boolean? Checks if it has [Symbol.iterator] methodmapfunction (any): boolean? Checks if it is a Map or an instance of a Mapobjectfunction (any): boolean? Checks if the constructor equals to Object (if it is strictly an object)promisefunction (any): boolean? Checks if it is a Promise or an instance of a Promisesetfunction (any): boolean? Checks if it is a Set or an instance of a Setstringfunction (any): boolean? Checks if it is boolean typethenablefunction (any): boolean? Checks if it has a then methodtransducerfunction (any): boolean? Checks if it is an object that follows the transducer protocoltypefunction (string, any): boolean? Checks if the type matchesstrictfunction (Function, any): boolean? Checks if the constructor function matchesnilfunction (any): boolean? Checks if it is null or undefinednotObject? negates the following methodnot.arrayfunction (any): boolean? Checks if is not an Arraynot.functionfunction (any): boolean? Checks if is not type functionnot.functorfunction (any): boolean? Checks if it has not a map methodnot.filterablefunction (any): boolean? Checks if it has not a filter methodnot.generatorfunction (any): boolean? Checks if it is not a generator functionnot.iteratorfunction (any): boolean? Checks if it has not [Symbol.iterator] methodnot.mapfunction (any): boolean? Checks if it is not a Map nor an instance of a Mapnot.objectfunction (any): boolean? Checks if the constructor not equals to Object (if it is strictly not an object)not.promisefunction (any): boolean? Checks if it is not a Promise nor an instance of a Promisenot.setfunction (any): boolean? Checks if it is not a Set nor an instance of a Setnot.stringfunction (any): boolean? Checks if it is not boolean typenot.thenablefunction (any): boolean? Checks if it has not a then methodnot.transducerfunction (any): boolean? Checks if it is not an object that follows the transducer protocolnot.typefunction (string, any): boolean? Checks if the type do not matches matchesnot.strictfunction (Function, any): boolean? Checks if the constructor function do not matchesnot.nilfunction (any): boolean? Checks if it is not null or undefined
Examples
is.object([]); => false
is(Object, []); //=> true
is(Object, {}); //=> true
is(Number, 1); //=> true
is(Object, 1); //=> false
is(String, 's'); //=> true
is(String, new String('')); //=> true
is(Object, new String('')); //=> true
is(Object, 's'); //=> false
is(Number, {}); //=> false
is.function(() => {}); => true
is.not.function(() => {}); => falseReturns Boolean
map
- See: transduce
Returns a new Iterable, constructed by applying the supplied function to every element of the supplied list.
When mapping an object, the function mapper accepts (value, key, object) In any other case, the mapper function accepts (value, index, collection). The value comes from the iterator of the collection.
Note: map does not skip deleted or unassigned indices (sparse arrays), unlike the
native Array.prototype.map method. For more details on this behavior, see:
Array.prototype.map
Acts as a transducer if a transformer is given as second parameter.
Parameters
fnFunction The function to be called on every element of the inputIterable.collectionCollection? The Iterable to be iterated over.
Examples
const toUpperCase = (x) => x.toUpperCase();
const double = (x) => x * 2;
const doubleValue = ([k, v]) => [k, v * 2];
map(toUpperCase, 'aeiou'); //=> 'AEIOU'
map(double, [1, 2, 3]); //=> [2, 4, 6]
map(double, Set[1, 2, 3]); //=> Set[2, 4, 6]
map(double, function* () { yield* [1, 2, 3]}); //=> [2, 4, 6]
map(double, { a: 1, b: 2 }); //=> { a: 2, b: 4 }
map(doubleValue, Map{ a: 1, b: 2 }); //=> Map{ a: 2, b: 4 }Returns (Collection | Function) The new Iterable or curried function.
pipe
- See: compose
Performs left-to-right function composition. The leftmost function may have any arity; the remaining functions must be unary.
In some libraries this function is named sequence.
Parameters
functions...Function
Examples
var f = pipe(Math.pow, toString);
f(3, 4); // (3^4).toString()Returns Function a function that represents the composition of the arguments
pipeAsync
- See: composeAsync
Performs left-to-right function composition. The leftmost function may have any arity; the remaining functions must be unary. If any function returns a promise, it chains remaining ones
Parameters
functions...Function
Examples
var head = ([h]) => h;
var process = (a) => Promise.resolve(a);
var promiseAll = Promise.all.bind(Promise);
var f = pipeAsync(process, promiseAll, head);
f([1, 2]); // Promise.all([process(1), process(2)])[0] => 1Returns Function a function that represents the composition of the arguments
reduce
- See: reduced
Returns a single item by iterating through the collection, successively calling the iterator function and passing it an accumulator value and the current value from the array, and then passing the result to the next call.
The iterator function receives: (acc, value, index, collection). while reducing an object
it receives: (acc, [value, key], collection).
It may use reduced to stop the iteration.
It also accepts a transducer instead of an iterator function.
Note: reduce does not skip deleted or unassigned indices (sparse arrays), unlike
the native Array.prototype.reduce method. For more details on this behavior, see:
Array.prototype.reduce
Parameters
transducerFunction The iterator function. Receives four values: the accumulator, the current element from the Iterable, the iteration index and the whole Iterable. It also accepts a Transducerinitialany The accumulator initial value.collectionCollection An Iterable parameter.
Examples
const add = (acc, act) => a + b;
reduce(add, 'normal', 'string'); //=> 'normal string'
reduce(add, 10, [1, 2, 3]); //=> 16
reduce(add, 10, Set[1, 2, 3]); //=> 16
reduce(add, 10, function* () { yield* [1, 2, 3]}); //=> 16
reduce(add, '', { a: 1, b: 2 }); //=> 'a,1b,2'
reduce(add, '', Map{ a: 1, b: 2 }); //=> 'a,1b,2'Returns any The final, accumulated value.
reduced
- See: reduce, transduce
Returns a value wrapped to indicate that it is the final value of the reduce and transduce functions. The returned value should be considered a black box: the internal structure is not guaranteed to be stable.
Parameters
stateany The final value of the reduce.
Examples
reduce(
pipe(add, ifElse(lte(10), reduced, identity)),
0,
[1, 2, 3, 4, 5]
) // 10Returns any The wrapped value.
take
Returns the first n elements of the iterable.
Parameters
Examples
const names = names
take(1, names); //=> ['foo']
take(1, function* () { yield* names }); //=> ['foo']
take(1, names); //=> ['foo']
take(2, names); //=> ['foo', 'bar']
take(3, names); //=> ['foo', 'bar', 'baz']
take(4, names); //=> ['foo', 'bar', 'baz']
take(3, 'ramda'); //=> 'ram'
take(1, Map{ a: 1, b: 2 }) => [['a', 1]]
const personnel = [
'Dave Brubeck',
'Paul Desmond',
'Eugene Wright',
'Joe Morello',
'Gerry Mulligan',
'Bob Bates',
'Joe Dodge',
'Ron Crotty'
];
const takeTwo = take(2);
takeFive(personnel); //=> ['Dave Brubeck', 'Paul Desmond']Returns any
tap
Runs the given function with the supplied object, then returns the object.
Acts as a transducer if a transformer is given as second parameter.
Parameters
fnFunction The function to call withx. The return value offnwill be thrown away.xany
Examples
const sayX = x => console.log('x is ' + x);
R.tap(sayX, 100); //=> 100
// logs 'x is 100'Returns any x.
transduce
- See: reduce, reduced, into
Initializes a transducer using supplied iterator function. Returns a single item by iterating through the list, successively calling the transformed iterator function and passing it an accumulator value and the current value from the array, and then passing the result to the next call.
The iterator function receives two values: (acc, value). It will be wrapped as a
transformer to initialize the transducer. A transformer can be passed directly in place
of an iterator function. In both cases, iteration may be stopped early with the
reduced function.
A transducer is a function that accepts a transformer and returns a transformer and can be composed directly.
A transformer is an object that provides a 2-arity reducing iterator function, step, 0-arity initial value function, init, and 1-arity result extraction function, result. The step function is used as the iterator function in reduce. The result function is used to convert the final accumulator into the return type and in most cases is R.identity. The init function can be used to provide an initial accumulator, but is ignored by transduce.
The iteration is performed with reduce after initializing the transducer.
Parameters
transducerFunction The transducer function. Receives a transformer and returns a transformer.combineFunction The iterator function. Receives two values, the accumulator and the current element from the array. Wrapped as transformer, if necessary, and used to initialize the transducerinitialany The initial accumulator value.collectionCollection The Iterable to iterate over.
Examples
var t = transducers;
var inc = function(n) { return n+1; };
var isEven = function(n) { return n % 2 == 0; };
var apush = function(arr,x) { arr.push(x); return arr; };
var xf = compose(map(inc),filter(isEven));
transduce(xf, apush, [], [1,2,3,4]); // [2,4]Returns any The final, accumulated value.