Bonjour,

J'essaye de construire un objet formaté définissant les colonnes de mon datatable mais dynamiquement à partir d'un json reflétant ma base de donnée.
Pour ce faire, j'essaye d'utiliser une fonction récursif mais pour l'instant le rendu final est loin d'être bon.

Mon Json :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 
(7) []
	0: {}
		id: 4
		libelleAgenceControle: "SCHS"
		site: "ville"
		agenceControle1: null
		agenceControle2: null
		agenceControle3: null
		agent: "maDonnee"
		agent: {}
			id: 7
			mail: null
			numero: 1234567
			nomagent: "dupond"
		personne: {}
		adressepersonne: "49 R DE LA JANNE"
		codePostpersonne: 59890
		​​​...
	1: ...
Ma fonction :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
 
var defColCache = function(donnees, champIgnore, keyParent){
    console.debug(donnees);
    var defCol = [];
    $.each(donnees, function (key, value) {
        console.debug(key);
        if ($.inArray(key, champIgnore) == -1) {
            console.debug("clé non présente dans champIgnore");
            if (value instanceof Date) {
                console.debug("c'est une date");
                defCol.push({
                    title: key,
                    data: (keyParent!="")?keyParent+"."+key:key,
                    visible: false,
                    render: function (data, type, row) {
                        return moment(data, "YYYY-MM-DD HH:mm:ss.SSS").format("DD-MM-YYYY");
                    },
                    type: "date",
                });
            } else {
                if (value instanceof Array) {
                    console.debug("c'est un tableau");
                    var nbDonnesMax = value.length;
                    var temp = [];
                    $.each(value, function (key2, value2) {
                        console.debug("************ "+value2);
                        var temp = defColCache(value2, champIgnore, (key<nbDonnesMax-1)?keyParent+"."+key2:key2);
                        if (temp) {
                            $.merge(defCol, temp);
                        }
                    });
                } else if (value instanceof Object) {
                    console.debug("c'est un objet");
                    var nbDonnesMax = value.length;
                    var temp = defColCache(value, champIgnore, (key<nbDonnesMax-1)?keyParent+"."+key:key);
                    key = (key<nbDonnesMax-1)?keyParent+"."+key:key;
                    if (temp) {
                        $.merge(defCol, temp);
                    }
                } else {
                    console.debug("c'est une clé standart");
                    if(key!="id") {
                        defCol.push({
                            title: key,
                            data: (keyParent != "") ? keyParent + "." + key : key,
                            visible: false
                        });
                    }
                }
            }
        } else {
            return false;
        }
    });
    return defCol;
}
Le résultat :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
 
(140) []
	[099]
		0: Object { title: "numero", data: "agent.numero", visible: false }
		1: Object { title: "nomagent", data: "agent.nomagent", visible: false }
		2: Object { title: "prenomagent", data: "agent.prenomagent", visible: false }
		3: Object { title: "telephone", data: "agent.telephone", visible: false }
		4: Object { title: "mail", data: "agent.mail", visible: false }
		8: Object { title: "dateEtat", data: "dateEtat", visible: false }
		20: Object { title: "numero", data: "agent.numero", visible: false }
		21: Object { title: "nomagent", data: "agent.nomagent", visible: false }
		22: Object { title: "prenomagent", data: "agent.prenomagent", visible: false }
		23: Object { title: "telephone", data: "agent.telephone", visible: false }
		24: Object { title: "mail", data: "agent.mail", visible: false }
		28: Object { title: "dateEtat", data: "1.dateEtat", visible: false }
		43: Object { title: "numero", data: "agent.numero", visible: false }
		44: Object { title: "nomagent", data: "agent.nomagent", visible: false }
		45: Object { title: "prenomagent", data: "agent.prenomagent", visible: false }
		46: Object { title: "telephone", data: "agent.telephone", visible: false }
		47: Object { title: "mail", data: "agent.mail", visible: false }
		...
	[100139]
		...
Du coté résultat on s'appercoit que l'on obtient 2 sous objets identiques, je ne vois pas comment cela peut se faire. Ensuite, j'obtiens 28: Object { title: "dateEtat", data: "1.dateEtat", visible: false } au lieu de 28: Object { title: "dateEtat", data: "dateEtat", visible: false }
Avez vous une idée d'où cela peut bloquer svp?