src/services/cast.js
/**
* 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(arr, n = 0) {
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(arr, n) {
return arr.length
? arr.reduce((acc, vL) => {
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(arr, n) {
return (n === 1) ? arr : _reduser(arr, n - 1);
}
//Copyright (c) 2017 Alex Tranchenko. All rights reserved.