function zipObject(props, values) {
      var index = -1,
          length = props ? props.length : 0,
          result = {};

      if (length && !values && !isArray(props[0])) {
        values = [];
      }
      while (++index < length) {
        var key = props[index];
        if (values) {
          result[key] = values[index];
        } else if (key) {
          result[key[0]] = key[1];
        }
      }
      return result;
    }
This method is like `_.zip` except that it accepts an iteratee to specify
how grouped values should be combined. The `iteratee` is bound to `thisArg`
and invoked with four arguments: (accumulator, value, index, group).

@static
@memberOf _
@category Array
@param {...Array} [arrays] The arrays to process.
@param {Function} [iteratee] The function to combine grouped values.
@param {*} [thisArg] The `this` binding of `iteratee`.
@returns {Array} Returns the new array of grouped elements.
@example

_.zipWith([1, 2], [10, 20], [100, 200], _.add);
// => [111, 222]