flatten.js 936 B

1234567891011121314151617181920212223242526272829303132
  1. var baseFlatten = require('../internal/baseFlatten'),
  2. isIterateeCall = require('../internal/isIterateeCall');
  3. /**
  4. * Flattens a nested array. If `isDeep` is `true` the array is recursively
  5. * flattened, otherwise it's only flattened a single level.
  6. *
  7. * @static
  8. * @memberOf _
  9. * @category Array
  10. * @param {Array} array The array to flatten.
  11. * @param {boolean} [isDeep] Specify a deep flatten.
  12. * @param- {Object} [guard] Enables use as a callback for functions like `_.map`.
  13. * @returns {Array} Returns the new flattened array.
  14. * @example
  15. *
  16. * _.flatten([1, [2, 3, [4]]]);
  17. * // => [1, 2, 3, [4]]
  18. *
  19. * // using `isDeep`
  20. * _.flatten([1, [2, 3, [4]]], true);
  21. * // => [1, 2, 3, 4]
  22. */
  23. function flatten(array, isDeep, guard) {
  24. var length = array ? array.length : 0;
  25. if (guard && isIterateeCall(array, isDeep, guard)) {
  26. isDeep = false;
  27. }
  28. return length ? baseFlatten(array, isDeep) : [];
  29. }
  30. module.exports = flatten;