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