33 lines
937 B
JavaScript
33 lines
937 B
JavaScript
|
var baseFlatten = require('../internal/baseFlatten'),
|
||
|
isIterateeCall = require('../internal/isIterateeCall');
|
||
|
|
||
|
/**
|
||
|
* Flattens a nested array. If `isDeep` is `true` the array is recursively
|
||
|
* flattened, otherwise it is 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]
|
||
|
*/
|
||
|
function flatten(array, isDeep, guard) {
|
||
|
var length = array ? array.length : 0;
|
||
|
if (guard && isIterateeCall(array, isDeep, guard)) {
|
||
|
isDeep = false;
|
||
|
}
|
||
|
return length ? baseFlatten(array, isDeep) : [];
|
||
|
}
|
||
|
|
||
|
module.exports = flatten;
|