aa9757abe421d51d0a9e16252402cc93f2cb6a7e
[platform/framework/web/crosswalk-tizen.git] /
1 var isArray = require('../lang/isArray');
2 var 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 (arr == null) {
10             return result;
11         } else if (level === 0) {
12             append(result, arr);
13             return result;
14         }
15
16         var value,
17             i = -1,
18             len = arr.length;
19         while (++i < len) {
20             value = arr[i];
21             if (isArray(value)) {
22                 flattenTo(value, result, level - 1);
23             } else {
24                 result.push(value);
25             }
26         }
27         return result;
28     }
29
30     /**
31      * Recursively flattens an array.
32      * A new array containing all the elements is returned.
33      * If `shallow` is true, it will only flatten one level.
34      */
35     function flatten(arr, level) {
36         level = level == null? -1 : level;
37         return flattenTo(arr, [], level);
38     }
39
40     module.exports = flatten;
41
42
43