-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path16-Recursion.js
94 lines (64 loc) · 2.85 KB
/
16-Recursion.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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
// ## Défi
// Écrivez une fonction récursive qui renvoie toutes les dépendances (et sous-dépendances) unique d’un module, triées alphabétiquement.
// Elles doivent être affichées au format dependance@version, par ex. [email protected].
// On autorise des versions multiples d’un même module, mais les doublons (versions identiques) doivent être retirés.
// ## Arguments
// `tree` : Une arborescence de dépendances. Voir ci-dessous pour sa structure.
// ## Exemple
// var loremIpsum = {
// "name": "lorem-ipsum",
// "version": "0.1.1",
// "dependencies": {
// "optimist": {
// "version": "0.3.7",
// "dependencies": {
// "wordwrap": {
// "version": "0.0.2"
// }
// }
// },
// "inflection": {
// "version": "1.2.6"
// }
// }
// }
// getDependencies(loremIpsum)
// ## Conditions
// N’utilisez pas de boucle `for`/`while`.
// ## Ressources
// https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Objets_globaux/Object/keys
// ## Base de travail
//Je dois renvoyer un tableau contenant pour chaque valeur une dépendance de l'objet tree.
//Avec object.keys() je peux renvoyer un tableau contenant les propriétés propres à un objet
//Le format de restitution de chaque valeur doit être "dependance@version". i.e. => ${dependance} @ ${version}
//Le tableau doit être trié par ordre alphabétique. Je peux utiliser la méthode .sort()
//https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Global_Objects/Array/sort
function getDependencies(tree, result =[], subResultValue=[]) {
if (!tree || !('dependencies' in tree) ){
return [];
}
const dependencies = tree.dependencies;
const dependencyKeys = Object.keys(dependencies);
if (dependencyKeys.length === 0 ) {
return result.sort();
}
const firstDependencyKey = dependencyKeys[0];
const firstDependencyObject = dependencies[firstDependencyKey];
if (('dependencies' in firstDependencyObject)){
const subDependencies = firstDependencyObject.dependencies;
const subDependencyKeys = Object.keys(subDependencies);
const subDependencyKey = subDependencyKeys[0];
const subDependencyObject = subDependencies[subDependencyKey];
const subResultValue = `${subDependencyKey}@${subDependencyObject.version}`;
if(subDependencyKeys.length === 0) {
return subResultValue;
}
delete firstDependencyObject.dependencies[subDependencyKey];
}
const resultValue = `${firstDependencyKey}@${firstDependencyObject.version}`;
result.push(subResultValue, resultValue);
delete tree.dependencies[firstDependencyKey];
getDependencies(tree, result, subResultValue);
}
module.exports = getDependencies