-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathfacebook1.js
69 lines (61 loc) · 1.84 KB
/
facebook1.js
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
65
66
67
68
69
/**
* flatten an array first level
* @method flatten
* @param array {Array}
* @return {Array} flatten array
*/
function flatten(array) {
// O(n)
return array.reduce((acc, current) => {
return Array.isArray(current) ? acc.concat(current) : acc.concat([current]);
}, []);
}
/**
* flatten an array recursively
* @method flattenDeep
* @param array {Array}
* @return {Array} flatten array
*/
function flattenDeep(array) {
return array.reduce((acc, current) => {
return Array.isArray(current) ? acc.concat(flattenDeep(current)) : acc.concat([current]);
}, []);
}
/**
* flatten an array recursively limited by depth
* @method flattenDepth
* @param array {Array}
* @return {Array} flatten array
*/
function flattenDepth(array, depth) {
if (depth === 0) {
return array;
}
return array.reduce((acc, current) => {
return Array.isArray(current) ? acc.concat(flattenDepth(current, --depth)) : acc.concat([current]);
}, []);
}
function flattenDepth(array, depth) {
if (depth === 0) {
return array;
}
return array.reduce((acc, current) => {
return Array.isArray(current) ? acc.concat(flattenDepth(current, --depth)) : acc.concat([current]);
}, []);
}
// 1 level
var result = JSON.stringify(flattenDepth(array, 1));
var expected = JSON.stringify([1, 2, [3, [4]], 5]);
console.log('FlattenDepth', assert(result, expected));
// 3 levels
var result = JSON.stringify(flattenDepth(array, 2));
var expected = JSON.stringify([1, 2, 3, [4], 5]);
console.log('FlattenDepth 2', assert(result, expected));
// 4 levels
var result = JSON.stringify(flattenDepth(array, 3));
var expected = JSON.stringify([1, 2, 3, 4, 5]);
console.log('FlattenDepth 3', assert(result, expected));
// 4 levels
var result = JSON.stringify(flattenDepth(array, 5));
var expected = JSON.stringify([1, 2, 3, 4, 5]);
console.log('FlattenDepth 3', assert(result, expected));