rangelib
Version:
a package for creating numerical ranges plus an array splitting library into multi-dimensional ones
89 lines (86 loc) • 2.63 kB
JavaScript
var Range = (function(){
return {
/**
* Generates a range from start to end with a difference of 1
* @param {Number}start
* @param {Number} end
* @returns {Array}
*/
range: function (start, end=undefined) {
if(end === undefined){
end = start;
start = 0;
}
var $back = [];
if(end > start){ /* forward range */
for (var aq = start; aq < end; aq++) {
$back.push(aq);
}
}else{ /* backward range */
for (var a = start; a > end; a--) {
$back.push(a);
}
}
return $back;
},
/**m
* Generates a range from start to end with a difference of diff
* @param {Number} start
* @param {Number} end
* @param {Number} diff
* @returns {Array}
*/
ranges: function (start,end,diff=1) {
if(diff === undefined){
diff = 1;
}
var $back = [];
if(end > start){ /* forward range */
if(end - diff > end){
throw new Error('Possible infinite loop detected check your diff');
}
for (var ac = start; ac < end; ac += diff) {
$back.push(ac);
}
}else{ /* backward range */
if(end + diff > end){
throw new Error('Possible infinite loop detected check your diff');
}
for (var a = start; a > end; a += diff) {
$back.push(a);
}
}
return $back;
},
/**
* Allows you to create a multi-dimensional array by splitting an array into n items per sub-array
* @param arr
* @param n
*/
splitRows: function (arr,n) {
let a = arr.length,
ar1 = [],
c = 0;
while(a > c){
let ar2 = [];
for(let b = c;b < c+n;b++){
ar2.push(arr[b] || undefined);
}
ar1.push(ar2);
c +=n;
}
return ar1;
},
/**
*
* @param arr
* @param cols
* @returns {*|Array}
*/
splitCols: function (arr,cols) {
let i = Math.ceil(arr.length/cols);
return this.splitRows(arr,i);
}
}
})();
module.exports = Range;