You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							38 lines
						
					
					
						
							1.2 KiB
						
					
					
				
			
		
		
	
	
							38 lines
						
					
					
						
							1.2 KiB
						
					
					
				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;
 | 
						|
 |