Fork me on GitHub

Namespace comb.array

Utilities for Arrays
Defined in: array.js.

Namespace Detail
comb.array
    /**
     * converts anything to an array
     *
     * @example
     *  comb.array.toArray({a : "b", b : "c"}) => [["a","b"], ["b","c"]];
     *  comb.array.toArray("a") => ["a"]
     *  comb.array.toArray(["a"]) =>  ["a"];
     *  comb.array.toArray() => [];
     *  comb.array.toArray("a", {a : "b"}) => ["a", ["a", "b"]];
     */
    toArray : function(o) {
        var ret = [];
        if (o != null) {
            var args = argsToArray(arguments);
            if (args.length == 1) {
                if (isArray(o)) {
                    ret = o;
                } else if (obj.isHash(o)) {
                    for (var i in o) {
                        if (o.hasOwnProperty(i)) {
                            ret.push([i, o[i]]);
                        }
                    }
                } else {
                    ret.push(o);
                }
            } else {
                args.forEach(function(a) {
                    ret = ret.concat(array.toArray(a));
                })
            }
        }
        return ret;
    },

    /**
     * Sums all items in an array
     *
     * @example
     *
     *  comb.array.sum([1,2,3]) => 6
     *  comb.array.sum(["A","B","C"]) => "ABC";
     *  var d1 = new Date(1999), d2 = new Date(2000), d3 = new Date(3000);
     *  comb.array.sum([d1,d2,d3]) => "Wed Dec 31 1969 18:00:01 GMT-0600 (CST)"
     *                              + "Wed Dec 31 1969"  18:00:02 GMT-0600 (CST)"
     *                              + "Wed Dec 31 1969 18:00:03 GMT-0600 (CST)"
     *  comb.array.sum([{},{},{}]) => "[object Object][object Object][object Object]";
     *
     * @param {Number[]} array the array of numbers to sum
     */
    sum : function(array) {
        array = array || [];
        if (array.length) {
            return array.reduce(function(a, b) {
                return a + b;
            });
        } else {
            return 0;
        }
    },    /**
     * Removes duplicates from an array
     *
     * @example
     *
     * comb.array.removeDuplicates([1,1,1]) => [1]
     * comb.array.removeDuplicates([1,2,3,2]) => [1,2,3]
     *
     * @param {Aray} array the array of elements to remove duplicates from
     */
    removeDuplicates : function(arr) {
        if (isArray(arr)) {
            var ret = arr.reduce(function(a, b) {
                if (a.indexOf(b) == -1) {
                    return a.concat(b);
                } else {
                    return a;
                }
            }, []);
            return ret;
        }
    },

    /**
     * Rotates an array the number of specified positions
     *
     * @example
     * var arr = ["a", "b", "c", "d"];
     * comb.array.rotate(arr)     => ["b", "c", "d", "a"]
     * comb.array.rotate(arr, 2)  => ["c", "d", "a", "b"]);
     * comb.array.rotate(arr, 3)  => ["d", "a", "b", "c"]);
     * comb.array.rotate(arr, 4)  => ["a", "b", "c", "d"]);
     * comb.array.rotate(arr, -1) => ["d", "a", "b", "c"]);
     * comb.array.rotate(arr, -2) => ["c", "d", "a", "b"]);
     * comb.array.rotate(arr, -3) => ["b", "c", "d", "a"]);
     * comb.array.rotate(arr, -4) => ["a", "b", "c", "d"]);
     *
     * @param {Array} array the array of elements to remove duplicates from
     * @param {Number} numberOfTimes the number of times to rotate the array
     */
    rotate : function(arr, numberOfTimes) {
        var ret = arr.slice();
        if (typeof numberOfTimes != "number") {
            numberOfTimes = 1;
        }
        if (numberOfTimes && isArray(arr)) {
            if (numberOfTimes > 0) {
                ret.push(ret.shift());
                numberOfTimes--;
            } else {
                ret.unshift(ret.pop());
                numberOfTimes++;
            }
            return array.rotate(ret, numberOfTimes);
        } else {
            return ret;
        }
    },

    /**
     * Finds all permutations of an array
     *
     * @example
     * var arr = [1,2,3];
     * comb.array.permutations(arr)    => [[ 1, 2, 3 ],[ 1, 3, 2 ],[ 2, 3, 1 ],
     *                                     [ 2, 1, 3 ],[ 3, 1, 2 ],[ 3, 2, 1 ]]
     * comb.array.permutations(arr, 2) => [[ 1, 2],[ 1, 3],[ 2, 3],[ 2, 1],[ 3, 1],[ 3, 2]]
     * comb.array.permutations(arr, 1) => [[1],[2],[3]]
     * comb.array.permutations(arr, 0) => [[]]
     * comb.array.permutations(arr, 4) => []
     *
     * @param {Array} arr the array to permute.
     * @param {Number} length the number of elements to permute.
     */
    permutations : function(arr, length) {
        var ret = [];
        if (isArray(arr)) {
            var copy = arr.slice(0);
            if (typeof length != "number") {
                length = arr.length;
            }
            if (!length) {
                ret = [
                    []
                ];
            } else if (length <= arr.length) {
                ret = arr.reduce(function(a, b, i) {
                    if (length > 1) {
                        var ret = permute(b, array.rotate(copy, i).slice(1), length);
                    } else {
                        ret = [
                            [b]
                        ];
                    }
                    return a.concat(ret);
                }, [])
            }
        }
        return ret;
    },

    /**
     * Zips to arrays together
     *
     * @example
     *  var a = [ 4, 5, 6 ], b = [ 7, 8, 9 ]
     *  comb.array.zip([1], [2], [3]) => [[ 1, 2, 3 ]]);
     *  comb.array.zip([1,2], [2], [3]) => [[ 1, 2, 3 ],[2, null, null]]
     *  comb.array.zip([1,2,3], a, b) => [[1, 4, 7],[2, 5, 8],[3, 6, 9]]
     *  comb.array.zip([1,2], a, b) => [[1, 4, 7],[2, 5, 8]]
     *  comb.array.zip(a, [1,2], [8]) => [[4,1,8],[5,2,null],[6,null,null]]
     *
     * @param arrays variable number of arrays to zip together
     */
    zip : function() {
        var ret = [];
        var arrs = argsToArray(arguments);
        if (arrs.length > 1) {
            var arr1 = arrs.shift();
            if (isArray(arr1)) {
                ret = arr1.reduce(function(a, b, i) {
                    var curr = [b];
                    for (var j = 0; j < arrs.length; j++) {
                        var currArr = arrs[j];
                        if (isArray(currArr) && !misc.isUndefined(currArr[i])) {
                            curr.push(currArr[i]);
                        } else {
                            curr.push(null);
                        }
                    }
                    a.push(curr)
                    return a;
                }, []);
            }
        }
        return ret;
    },

    /**
     * Transposes an array of arrays
     * @example
     *
     * comb.array.transpose([[1,2,3], [4,5,6]]) => [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]
     * comb.array.transpose([[1,2], [3,4], [5,6]]) => [ [ 1, 3, 5 ], [ 2, 4, 6 ] ]
     * comb.array.transpose([[1], [3,4], [5,6]]) => [[1]])
     *
     * @param [Array[Array[]]] arr Array of arrays
     */
    transpose : function(arr) {
        var ret = [];
        if (isArray(arr) && arr.length) {
            var last;
            arr.forEach(function(a) {
                if (isArray(a) && (!last || a.length == last.length)) {
                    a.forEach(function(b, i) {
                        !ret[i] && (ret[i] = []);
                        ret[i].push(b);
                    });
                    last = a;
                }
            });
        }
        return ret;
    },
    /**
     * Retrieves values at specified indexes in the array
     *
     * @example
     *
     *  var arr =["a", "b", "c", "d"]
     *   comb.array.valuesAt(arr, 1,2,3) => ["b", "c", "d"];
     *   comb.array.valuesAt(arr, 1,2,3, 4) => ["b", "c", "d", null];
     *   comb.array.valuesAt(arr, 0,3) => ["a", "d"];
     *
     *   @param {Array} arr the array to retrieve values from
     *   @index {Number} index variable number of indexes to retrieve
     */
    valuesAt : function(arr, indexes) {
        var ret = [];
        var indexes = argsToArray(arguments);
        var arr = indexes.shift(), l = arr.length;
        if (isArray(arr) && indexes.length) {
            for (var i = 0; i < indexes.length; i++) {
                ret.push(arr[indexes[i]] || null);
            }
        }
        return ret;
    },

    /**
     * Union a variable number of arrays together
     *
     * @example
     *
     * comb.array.union(['a','b','c'], ['b','c', 'd']) => ["a", "b", "c", "d"]
     * comb.array.union(["a"], ["b"], ["c"], ["d"], ["c"]) => ["a", "b", "c", "d"]
     *
     * @param arrs variable number of arrays to union
     */
    union : function() {
        var ret = [];
        var arrs = argsToArray(arguments);
        if (arrs.length > 1) {
            ret = array.removeDuplicates(arrs.reduce(function(a, b) {
                return a.concat(b);
            }, []));
        }
        return ret;
    },

    /**
     * Finds the intersection of arrays
     * NOTE : this function accepts an arbitrary number of arrays
     *
     * @example
     * comb.array.intersect([1,2], [2,3], [2,3,5]) => [2]
     * comb.array.intersect([1,2,3], [2,3,4,5], [2,3,5]) => [2,3]
     * comb.array.intersect([1,2,3,4], [2,3,4,5], [2,3,4,5]) => [2,3,4]
     * comb.array.intersect([1,2,3,4,5], [1,2,3,4,5], [1,2,3]) => [1,2,3]
     * comb.array.intersect([[1,2,3,4,5],[1,2,3,4,5],[1,2,3]]) => [1,2,3]
     *
     * @param {Array} a
     * @param {Array} b
     */
    intersect : function(a, b) {
        var collect = [], set;
        var args = argsToArray(arguments);
        if (args.length > 1) {
            
            set = args;
        } else {
            set = args[0];
        }
        if (isArray(set)) {
            var x = set.shift();
            var collect = set.reduce(function(a, b) {
                return intersection(a, b);
            }, x);
        }
        return array.removeDuplicates(collect);
    },

    /**
     * Finds the powerset of an array
     *
     * @example
     *
     *  comb.array.powerSet([1,2]) => [
     *           [],
     *           [ 1 ],
     *           [ 2 ],
     *           [ 1, 2 ]
     *   ]
     *   comb.array.powerSet([1,2,3]) => [
     *           [],
     *           [ 1 ],
     *           [ 2 ],
     *           [ 1, 2 ],
     *           [ 3 ],
     *           [ 1, 3 ],
     *           [ 2, 3 ],
     *           [ 1, 2, 3 ]
     *       ]
     *   comb.array.powerSet([1,2,3,4]) => [
     *           [],
     *           [ 1 ],
     *           [ 2 ],
     *           [ 1, 2 ],
     *           [ 3 ],
     *           [ 1, 3 ],
     *           [ 2, 3 ],
     *           [ 1, 2, 3 ],
     *           [ 4 ],
     *           [ 1, 4 ],
     *           [ 2, 4 ],
     *           [ 1, 2, 4 ],
     *           [ 3, 4 ],
     *           [ 1, 3, 4 ],
     *           [ 2, 3, 4 ],
     *           [ 1, 2, 3, 4 ]
     *       ]
     *
     * @param {Array} arr the array to find the powerset of
     */
    powerSet : function(arr) {
        var ret = [];
        if (isArray(arr) && arr.length) {
            var ret = arr.reduce(function(a, b) {
                var ret = a.map(function(c) {
                    return c.concat(b);
                })
                return a.concat(ret);
            }, [
                []
            ]);
        }
        return ret;
    },

    /**
     * Find the cartesian product of two arrays
     *
     * @example
     *
     * comb.array.cartesian([1,2], [2,3]) => [
     *           [1,2],
     *           [1,3],
     *           [2,2],
     *           [2,3]
     *       ]
     * comb.array.cartesian([1,2], [2,3,4]) => [
     *           [1,2],
     *           [1,3],
     *           [1,4] ,
     *           [2,2],
     *           [2,3],
     *           [2,4]
     *       ]
     * comb.array.cartesian([1,2,3], [2,3,4]) => [
     *           [1,2],
     *           [1,3],
     *           [1,4] ,
     *           [2,2],
     *           [2,3],
     *           [2,4] ,
     *           [3,2],
     *           [3,3],
     *           [3,4]
     *       ]
     *
     * @param {Array} a
     * @param {Array} b
     */
    cartesian : function(a, b) {
        var ret = [];
        if (isArray(a) && isArray(b) && a.length && b.length)
            ret = cross(a[0], b).concat(array.cartesian(a.slice(1), b));
        return ret;
    },

    /**
     * Compacts an array removing null or undefined objects from the array.
     *
     * @example
     *
     * var x;
     * comb.array.compact([1,null,null,x,2]) => [1,2]
     * comb.array.compact([1,2]) => [1,2]
     *
     * @param {Array} arr
     */
    compact : function(arr) {
        var ret = [];
        if (isArray(arr) && arr.length) {
            ret = arr.filter(function(item) {
                return !misc.isUndefinedOrNull(item);
            })
        }
        return ret;
    },

    /**
     * Flatten multiple arrays into a single array
     *
     * @example
     *
     * comb.array.flatten([1,2], [2,3], [3,4]) => [1,2,2,3,3,4]
     * comb.array.flatten([1,"A"], [2,"B"], [3,"C"]) => [1,"A",2,"B",3,"C"]
     *
     * @param array
     */
    flatten : function(arr) {
        var set;
        var args = argsToArray(arguments);
        if (args.length > 1) {
            
            set = args;
        } else {
            set = array.toArray(arr);
        }
        return set.reduce(function(a, b) {
            return a.concat(b);
        }, []);
    }

Method Detail
<static> comb.array.cartesian(a, b)
Find the cartesian product of two arrays

Example 1 :

comb.array.cartesian([1,2], [2,3]) => [
          [1,2],
          [1,3],
          [2,2],
          [2,3]
      ]
comb.array.cartesian([1,2], [2,3,4]) => [
          [1,2],
          [1,3],
          [1,4] ,
          [2,2],
          [2,3],
          [2,4]
      ]
comb.array.cartesian([1,2,3], [2,3,4]) => [
          [1,2],
          [1,3],
          [1,4] ,
          [2,2],
          [2,3],
          [2,4] ,
          [3,2],
          [3,3],
          [3,4]
      ]
Parameters:
{Array} a
{Array} b
var ret = [];
if (isArray(a) && isArray(b) && a.length && b.length)
    ret = cross(a[0], b).concat(array.cartesian(a.slice(1), b));
return ret;
    
<static> comb.array.compact(arr)
Compacts an array removing null or undefined objects from the array.

Example 1 :

var x;
comb.array.compact([1,null,null,x,2]) => [1,2]
comb.array.compact([1,2]) => [1,2]
Parameters:
{Array} arr
var ret = [];
if (isArray(arr) && arr.length) {
    ret = arr.filter(function(item) {
        return !misc.isUndefinedOrNull(item);
    })
}
return ret;
    
<static> comb.array.flatten(array)
Flatten multiple arrays into a single array

Example 1 :

comb.array.flatten([1,2], [2,3], [3,4]) => [1,2,2,3,3,4]
comb.array.flatten([1,"A"], [2,"B"], [3,"C"]) => [1,"A",2,"B",3,"C"]
Parameters:
array
var set;
var args = argsToArray(arguments);
if (args.length > 1) {
    
    set = args;
} else {
    set = array.toArray(arr);
}
return set.reduce(function(a, b) {
    return a.concat(b);
}, []);
    
<static> comb.array.intersect(a, b)
Finds the intersection of arrays NOTE : this function accepts an arbitrary number of arrays

Example 1 :

comb.array.intersect([1,2], [2,3], [2,3,5]) => [2]
comb.array.intersect([1,2,3], [2,3,4,5], [2,3,5]) => [2,3]
comb.array.intersect([1,2,3,4], [2,3,4,5], [2,3,4,5]) => [2,3,4]
comb.array.intersect([1,2,3,4,5], [1,2,3,4,5], [1,2,3]) => [1,2,3]
comb.array.intersect([[1,2,3,4,5],[1,2,3,4,5],[1,2,3]]) => [1,2,3]
Parameters:
{Array} a
{Array} b
var collect = [], set;
var args = argsToArray(arguments);
if (args.length > 1) {
    
    set = args;
} else {
    set = args[0];
}
if (isArray(set)) {
    var x = set.shift();
    var collect = set.reduce(function(a, b) {
        return intersection(a, b);
    }, x);
}
return array.removeDuplicates(collect);
    
<static> comb.array.permutations(arr, length)
Finds all permutations of an array

Example 1 :

var arr = [1,2,3];
comb.array.permutations(arr)    => [[ 1, 2, 3 ],[ 1, 3, 2 ],[ 2, 3, 1 ],
                                    [ 2, 1, 3 ],[ 3, 1, 2 ],[ 3, 2, 1 ]]
comb.array.permutations(arr, 2) => [[ 1, 2],[ 1, 3],[ 2, 3],[ 2, 1],[ 3, 1],[ 3, 2]]
comb.array.permutations(arr, 1) => [[1],[2],[3]]
comb.array.permutations(arr, 0) => [[]]
comb.array.permutations(arr, 4) => []
Parameters:
{Array} arr
the array to permute.
{Number} length
the number of elements to permute.
var ret = [];
if (isArray(arr)) {
    var copy = arr.slice(0);
    if (typeof length != "number") {
        length = arr.length;
    }
    if (!length) {
        ret = [
            []
        ];
    } else if (length <= arr.length) {
        ret = arr.reduce(function(a, b, i) {
            if (length > 1) {
                var ret = permute(b, array.rotate(copy, i).slice(1), length);
            } else {
                ret = [
                    [b]
                ];
            }
            return a.concat(ret);
        }, [])
    }
}
return ret;
    
<static> comb.array.powerSet(arr)
Finds the powerset of an array

Example 1 :

 comb.array.powerSet([1,2]) => [
          [],
          [ 1 ],
          [ 2 ],
          [ 1, 2 ]
  ]
  comb.array.powerSet([1,2,3]) => [
          [],
          [ 1 ],
          [ 2 ],
          [ 1, 2 ],
          [ 3 ],
          [ 1, 3 ],
          [ 2, 3 ],
          [ 1, 2, 3 ]
      ]
  comb.array.powerSet([1,2,3,4]) => [
          [],
          [ 1 ],
          [ 2 ],
          [ 1, 2 ],
          [ 3 ],
          [ 1, 3 ],
          [ 2, 3 ],
          [ 1, 2, 3 ],
          [ 4 ],
          [ 1, 4 ],
          [ 2, 4 ],
          [ 1, 2, 4 ],
          [ 3, 4 ],
          [ 1, 3, 4 ],
          [ 2, 3, 4 ],
          [ 1, 2, 3, 4 ]
      ]
Parameters:
{Array} arr
the array to find the powerset of
var ret = [];
if (isArray(arr) && arr.length) {
    var ret = arr.reduce(function(a, b) {
        var ret = a.map(function(c) {
            return c.concat(b);
        })
        return a.concat(ret);
    }, [
        []
    ]);
}
return ret;
    
<static> comb.array.removeDuplicates(array)
Removes duplicates from an array

Example 1 :

comb.array.removeDuplicates([1,1,1]) => [1]
comb.array.removeDuplicates([1,2,3,2]) => [1,2,3]
Parameters:
{Aray} array
the array of elements to remove duplicates from
if (isArray(arr)) {
    var ret = arr.reduce(function(a, b) {
        if (a.indexOf(b) == -1) {
            return a.concat(b);
        } else {
            return a;
        }
    }, []);
    return ret;
}
    
<static> comb.array.rotate(array, numberOfTimes)
Rotates an array the number of specified positions

Example 1 :

var arr = ["a", "b", "c", "d"];
comb.array.rotate(arr)     => ["b", "c", "d", "a"]
comb.array.rotate(arr, 2)  => ["c", "d", "a", "b"]);
comb.array.rotate(arr, 3)  => ["d", "a", "b", "c"]);
comb.array.rotate(arr, 4)  => ["a", "b", "c", "d"]);
comb.array.rotate(arr, -1) => ["d", "a", "b", "c"]);
comb.array.rotate(arr, -2) => ["c", "d", "a", "b"]);
comb.array.rotate(arr, -3) => ["b", "c", "d", "a"]);
comb.array.rotate(arr, -4) => ["a", "b", "c", "d"]);
Parameters:
{Array} array
the array of elements to remove duplicates from
{Number} numberOfTimes
the number of times to rotate the array
var ret = arr.slice();
if (typeof numberOfTimes != "number") {
    numberOfTimes = 1;
}
if (numberOfTimes && isArray(arr)) {
    if (numberOfTimes > 0) {
        ret.push(ret.shift());
        numberOfTimes--;
    } else {
        ret.unshift(ret.pop());
        numberOfTimes++;
    }
    return array.rotate(ret, numberOfTimes);
} else {
    return ret;
}
    
<static> comb.array.sum(array)
Sums all items in an array

Example 1 :

 comb.array.sum([1,2,3]) => 6
 comb.array.sum(["A","B","C"]) => "ABC";
 var d1 = new Date(1999), d2 = new Date(2000), d3 = new Date(3000);
 comb.array.sum([d1,d2,d3]) => "Wed Dec 31 1969 18:00:01 GMT-0600 (CST)"
                             + "Wed Dec 31 1969"  18:00:02 GMT-0600 (CST)"
                             + "Wed Dec 31 1969 18:00:03 GMT-0600 (CST)"
 comb.array.sum([{},{},{}]) => "[object Object][object Object][object Object]";
Parameters:
{Number[]} array
the array of numbers to sum
array = array || [];
if (array.length) {
    return array.reduce(function(a, b) {
        return a + b;
    });
} else {
    return 0;
}
    
<static> comb.array.toArray(o)
converts anything to an array

Example 1 :

 comb.array.toArray({a : "b", b : "c"}) => [["a","b"], ["b","c"]];
 comb.array.toArray("a") => ["a"]
 comb.array.toArray(["a"]) =>  ["a"];
 comb.array.toArray() => [];
 comb.array.toArray("a", {a : "b"}) => ["a", ["a", "b"]];
Parameters:
o
var ret = [];
if (o != null) {
    var args = argsToArray(arguments);
    if (args.length == 1) {
        if (isArray(o)) {
            ret = o;
        } else if (obj.isHash(o)) {
            for (var i in o) {
                if (o.hasOwnProperty(i)) {
                    ret.push([i, o[i]]);
                }
            }
        } else {
            ret.push(o);
        }
    } else {
        args.forEach(function(a) {
            ret = ret.concat(array.toArray(a));
        })
    }
}
return ret;
    
<static> comb.array.transpose(Array[Array[]])
Transposes an array of arrays

Example 1 :

comb.array.transpose([[1,2,3], [4,5,6]]) => [ [ 1, 4 ], [ 2, 5 ], [ 3, 6 ] ]
comb.array.transpose([[1,2], [3,4], [5,6]]) => [ [ 1, 3, 5 ], [ 2, 4, 6 ] ]
comb.array.transpose([[1], [3,4], [5,6]]) => [[1]])
Parameters:
Array[Array[]] Optional
arr Array of arrays
var ret = [];
if (isArray(arr) && arr.length) {
    var last;
    arr.forEach(function(a) {
        if (isArray(a) && (!last || a.length == last.length)) {
            a.forEach(function(b, i) {
                !ret[i] && (ret[i] = []);
                ret[i].push(b);
            });
            last = a;
        }
    });
}
return ret;
    
<static> comb.array.union(arrs)
Union a variable number of arrays together

Example 1 :

comb.array.union(['a','b','c'], ['b','c', 'd']) => ["a", "b", "c", "d"]
comb.array.union(["a"], ["b"], ["c"], ["d"], ["c"]) => ["a", "b", "c", "d"]
Parameters:
arrs
variable number of arrays to union
var ret = [];
var arrs = argsToArray(arguments);
if (arrs.length > 1) {
    ret = array.removeDuplicates(arrs.reduce(function(a, b) {
        return a.concat(b);
    }, []));
}
return ret;
    
<static> comb.array.valuesAt(arr, indexes)
Retrieves values at specified indexes in the array

Example 1 :

 var arr =["a", "b", "c", "d"]
  comb.array.valuesAt(arr, 1,2,3) => ["b", "c", "d"];
  comb.array.valuesAt(arr, 1,2,3, 4) => ["b", "c", "d", null];
  comb.array.valuesAt(arr, 0,3) => ["a", "d"];
Parameters:
{Array} arr
the array to retrieve values from
indexes
var ret = [];
var indexes = argsToArray(arguments);
var arr = indexes.shift(), l = arr.length;
if (isArray(arr) && indexes.length) {
    for (var i = 0; i < indexes.length; i++) {
        ret.push(arr[indexes[i]] || null);
    }
}
return ret;
    
<static> comb.array.zip(arrays)
Zips to arrays together

Example 1 :

 var a = [ 4, 5, 6 ], b = [ 7, 8, 9 ]
 comb.array.zip([1], [2], [3]) => [[ 1, 2, 3 ]]);
 comb.array.zip([1,2], [2], [3]) => [[ 1, 2, 3 ],[2, null, null]]
 comb.array.zip([1,2,3], a, b) => [[1, 4, 7],[2, 5, 8],[3, 6, 9]]
 comb.array.zip([1,2], a, b) => [[1, 4, 7],[2, 5, 8]]
 comb.array.zip(a, [1,2], [8]) => [[4,1,8],[5,2,null],[6,null,null]]
Parameters:
arrays
variable number of arrays to zip together
var ret = [];
var arrs = argsToArray(arguments);
if (arrs.length > 1) {
    var arr1 = arrs.shift();
    if (isArray(arr1)) {
        ret = arr1.reduce(function(a, b, i) {
            var curr = [b];
            for (var j = 0; j < arrs.length; j++) {
                var currArr = arrs[j];
                if (isArray(currArr) && !misc.isUndefined(currArr[i])) {
                    curr.push(currArr[i]);
                } else {
                    curr.push(null);
                }
            }
            a.push(curr)
            return a;
        }, []);
    }
}
return ret;
    

Documentation generated by JsDoc Toolkit 2.4.0 on Tue Jan 31 2012 16:14:11 GMT-0600 (CST)