8a4cb460d711954f7bc921c30f2f5f871726e253
[yaffs-website] / node_modules / grunt-legacy-util / node_modules / lodash / _baseFlatten.js
1 var arrayPush = require('./_arrayPush'),
2     isArguments = require('./isArguments'),
3     isArray = require('./isArray'),
4     isArrayLikeObject = require('./isArrayLikeObject');
5
6 /**
7  * The base implementation of `_.flatten` with support for restricting flattening.
8  *
9  * @private
10  * @param {Array} array The array to flatten.
11  * @param {boolean} [isDeep] Specify a deep flatten.
12  * @param {boolean} [isStrict] Restrict flattening to arrays-like objects.
13  * @param {Array} [result=[]] The initial result value.
14  * @returns {Array} Returns the new flattened array.
15  */
16 function baseFlatten(array, isDeep, isStrict, result) {
17   result || (result = []);
18
19   var index = -1,
20       length = array.length;
21
22   while (++index < length) {
23     var value = array[index];
24     if (isArrayLikeObject(value) &&
25         (isStrict || isArray(value) || isArguments(value))) {
26       if (isDeep) {
27         // Recursively flatten arrays (susceptible to call stack limits).
28         baseFlatten(value, isDeep, isStrict, result);
29       } else {
30         arrayPush(result, value);
31       }
32     } else if (!isStrict) {
33       result[result.length] = value;
34     }
35   }
36   return result;
37 }
38
39 module.exports = baseFlatten;