forked from actions/setup-maven
34 lines
1014 B
JavaScript
34 lines
1014 B
JavaScript
|
var _getLength = require('./_getLength.js');
|
||
|
var _isArrayLike = require('./_isArrayLike.js');
|
||
|
var isArray = require('./isArray.js');
|
||
|
var isArguments = require('./isArguments.js');
|
||
|
|
||
|
// Internal implementation of a recursive `flatten` function.
|
||
|
function flatten(input, depth, strict, output) {
|
||
|
output = output || [];
|
||
|
if (!depth && depth !== 0) {
|
||
|
depth = Infinity;
|
||
|
} else if (depth <= 0) {
|
||
|
return output.concat(input);
|
||
|
}
|
||
|
var idx = output.length;
|
||
|
for (var i = 0, length = _getLength(input); i < length; i++) {
|
||
|
var value = input[i];
|
||
|
if (_isArrayLike(value) && (isArray(value) || isArguments(value))) {
|
||
|
// Flatten current level of array or arguments object.
|
||
|
if (depth > 1) {
|
||
|
flatten(value, depth - 1, strict, output);
|
||
|
idx = output.length;
|
||
|
} else {
|
||
|
var j = 0, len = value.length;
|
||
|
while (j < len) output[idx++] = value[j++];
|
||
|
}
|
||
|
} else if (!strict) {
|
||
|
output[idx++] = value;
|
||
|
}
|
||
|
}
|
||
|
return output;
|
||
|
}
|
||
|
|
||
|
module.exports = flatten;
|