-
Notifications
You must be signed in to change notification settings - Fork 0
/
arrzip.js
71 lines (59 loc) · 1.63 KB
/
arrzip.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
'use strict';
module.exports = function(arr){
function findExtremes(arr){
var lowest = arr[0].length;
var highest = arr[0].length;
for (var i = 0; i < arr.length; i++) {
if (arr[i].length < lowest) lowest = arr[i].length;
if (arr[i].length > highest) highest = arr[i].length;
}
return {'lowest': lowest, 'highest': highest};
};
function short(arr, shortest){
var new_arr = [];
var tmp_arr = [];
for (var i = 0; i < shortest; i++){
for (var j = 0; j < args.length; j++) {
tmp_arr.push(args[j][i]);
}
new_arr.push(tmp_arr);
tmp_arr = [];
}
return new_arr;
};
function lng(arr, longest){
var new_arr = [];
var tmp_arr = [];
for (var i = 0; i < longest; i++){
for (var j = 0; j < arr.length; j++) {
if (i < arr[j].length){
tmp_arr.push(arr[j][i]);
}
}
new_arr.push(tmp_arr);
tmp_arr = [];
}
return new_arr;
};
var start = 0;
var args = [];
var singleFlag = 0;
for (var key in arguments) {
args.push(arguments[key]);
};
if (typeof args[args.length-1] === 'boolean'){
start = args[args.length-1];
args = args.slice(0,-1);
}
function allArrays(element, index, array){
return Array.isArray(element);
}
if (args.length < 2){
throw new Error('arrzip expects two arrays, got ' + args.length);
} else if (!args.every(allArrays)) {
throw new TypeError('Expected all arrays, didn\'t get all arrays');
}
var extremes = findExtremes(args.slice(0, args.length));
if (!start) return short(args, extremes.lowest);
else return lng(args, extremes.highest);
};