monad-ts
Version:
Monad-ts is a small library implements some of key monads and way to chain them in a pipe (flow) in JavaScript and TypeScript. Angular 2+ compatible.
42 lines (37 loc) • 1.15 kB
text/typescript
/**
* Decreasing the dimension of an array by n.
* @method cast
* @param {any} arr - input array.
* @param {number} n - decreasing factor.
* @return {Array<any>|T[]|Error}
*/
export function cast<T, U>(arr: any, n: number = 0): Array<T> | Array<U> | Error {
return typeof n === 'number' && Array.isArray(arr)
? n > 0 ? _reduser(arr, n) : arr
: new Error('Function cast. Input must be array and factor - number.');
}
/**
* @method _reduser
* @param {Array<T>} arr - input array.
* @param {number} n - decreasing factor.
* @return {Array<any>}
* @private
*/
function _reduser<T>(arr: T[], n: number): Array<any>{
return arr.length
? arr.reduce((acc: Array<any>, vL: any)=>{
return acc.concat(_fact(vL, n));
},[])
: arr;
}
/**
* @method _fact
* @param {Array<any>} arr - input array.
* @param {number} n - decreasing factor.
* @return {Array<any>}
* @private
*/
function _fact<T>(arr: Array<any>, n: number): Array<any>{
return (n === 1) ? arr : _reduser(arr, n-1);
}
//Copyright (c) 2017 Alex Tranchenko. All rights reserved.