mirror of
https://github.com/stCarolas/setup-maven.git
synced 2024-11-23 11:36:08 +08:00
32 lines
986 B
JavaScript
32 lines
986 B
JavaScript
|
import getLength from './_getLength.js';
|
||
|
import isArrayLike from './_isArrayLike.js';
|
||
|
import isArray from './isArray.js';
|
||
|
import isArguments from './isArguments.js';
|
||
|
|
||
|
// Internal implementation of a recursive `flatten` function.
|
||
|
export default 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;
|
||
|
}
|