function flatten(array, isDeep, guard) {
  var length = array ? array.length : 0;
  if (guard && isIterateeCall(array, isDeep, guard)) {
    isDeep = false;
  }
  return length ? baseFlatten(array, isDeep) : [];
}
Flattens a nested array. If `isDeep` is `true` the array is recursively
flattened, otherwise it's only flattened a single level.

@static
@memberOf _
@category Array
@param {Array} array The array to flatten.
@param {boolean} [isDeep] Specify a deep flatten.
@param- {Object} [guard] Enables use as a callback for functions like `_.map`.
@returns {Array} Returns the new flattened array.
@example

_.flatten([1, [2, 3, [4]]]);
// => [1, 2, 3, [4]]

// using `isDeep`
_.flatten([1, [2, 3, [4]]], true);
// => [1, 2, 3, 4]