| 1234567891011121314151617181920212223242526272829303132333435363738 | var arrayPush = require('./_arrayPush'),    isFlattenable = require('./_isFlattenable');/** * The base implementation of `_.flatten` with support for restricting flattening. * * @private * @param {Array} array The array to flatten. * @param {number} depth The maximum recursion depth. * @param {boolean} [predicate=isFlattenable] The function invoked per iteration. * @param {boolean} [isStrict] Restrict to values that pass `predicate` checks. * @param {Array} [result=[]] The initial result value. * @returns {Array} Returns the new flattened array. */function baseFlatten(array, depth, predicate, isStrict, result) {  var index = -1,      length = array.length;  predicate || (predicate = isFlattenable);  result || (result = []);  while (++index < length) {    var value = array[index];    if (depth > 0 && predicate(value)) {      if (depth > 1) {        // Recursively flatten arrays (susceptible to call stack limits).        baseFlatten(value, depth - 1, predicate, isStrict, result);      } else {        arrayPush(result, value);      }    } else if (!isStrict) {      result[result.length] = value;    }  }  return result;}module.exports = baseFlatten;
 |