UNPKG

1.1 kBJavaScriptView Raw
1var isArray = require('../lang/isArray');
2var append = require('./append');
3
4 /*
5 * Helper function to flatten to a destination array.
6 * Used to remove the need to create intermediate arrays while flattening.
7 */
8 function flattenTo(arr, result, level) {
9 if (level === 0) {
10 append(result, arr);
11 return result;
12 }
13
14 var value,
15 i = -1,
16 len = arr.length;
17 while (++i < len) {
18 value = arr[i];
19 if (isArray(value)) {
20 flattenTo(value, result, level - 1);
21 } else {
22 result.push(value);
23 }
24 }
25 return result;
26 }
27
28 /**
29 * Recursively flattens an array.
30 * A new array containing all the elements is returned.
31 * If level is specified, it will only flatten up to that level.
32 */
33 function flatten(arr, level) {
34 if (arr == null) {
35 return [];
36 }
37
38 level = level == null ? -1 : level;
39 return flattenTo(arr, [], level);
40 }
41
42 module.exports = flatten;
43
44
45