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