Blame view

node_modules/array-flatten/array-flatten.js 1.17 KB
f7563de62   Palak Handa   first commit
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
  'use strict'
  
  /**
   * Expose `arrayFlatten`.
   */
  module.exports = arrayFlatten
  
  /**
   * Recursive flatten function with depth.
   *
   * @param  {Array}  array
   * @param  {Array}  result
   * @param  {Number} depth
   * @return {Array}
   */
  function flattenWithDepth (array, result, depth) {
    for (var i = 0; i < array.length; i++) {
      var value = array[i]
  
      if (depth > 0 && Array.isArray(value)) {
        flattenWithDepth(value, result, depth - 1)
      } else {
        result.push(value)
      }
    }
  
    return result
  }
  
  /**
   * Recursive flatten function. Omitting depth is slightly faster.
   *
   * @param  {Array} array
   * @param  {Array} result
   * @return {Array}
   */
  function flattenForever (array, result) {
    for (var i = 0; i < array.length; i++) {
      var value = array[i]
  
      if (Array.isArray(value)) {
        flattenForever(value, result)
      } else {
        result.push(value)
      }
    }
  
    return result
  }
  
  /**
   * Flatten an array, with the ability to define a depth.
   *
   * @param  {Array}  array
   * @param  {Number} depth
   * @return {Array}
   */
  function arrayFlatten (array, depth) {
    if (depth == null) {
      return flattenForever(array, [])
    }
  
    return flattenWithDepth(array, [], depth)
  }