Bonjour la communauté !

Pour donner une explication sur le titre de cette discussion voila les faits :

J'ai développé une carte interactive avec un peu plus de 6000 marqueurs séparés en différentes classes.
Devant faire une maj du fond de carte, cela me décale tous les marqueurs.
Pour me faciliter la vie, j'ai développé une page avec un script de conversion.

Mon bloc de marqueurs est un array contenant lui-même des array :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
[[0,[4456,4291],langue.pano1],[0,[4546,4491],langue.pano2],[0,[4095,4168],langue.pano3]]
Pour faire simple, je n'ai mis qu'un bloc de 3 marqueurs. Chaque marqueur est composé d'un array comprenant [type,[coordonnées],descriptif (sous forme de variable)]

Je colle mon bloc dans un <textarea> puis je clique sur un bouton pour lancer la convertion.

Pour verifier que ca marche j'ai dans un premier temps collé directement le bloc dans la variable:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
function conv1() {
	// var numbers = JSON.parse(document.getElementById("arraytoconv").value);
	var numbers = [[0,[4456,4291],langue.pano1],[0,[4546,4491],langue.pano2],[0,[4095,4168],langue.pano3]];
	numbers.forEach(myFunction);
	document.getElementById("resultconv").value = text;
};
Placé en direct, pas de soucis la conversion se déroule bien.

Mais lorsque je parse mon texte récupéré dans la fenêtre de saisie, je me retrouve avec une erreur unexpected token.
Après vérification j'ai compris que mon array numbers "reconstruit" ne ressemble pas à celui initialement voulu car la fonction parse traite le bloc comme un seul élément
et non pas une suite de valeur dans le array.
Si je rajoute des "" pour encadrer mon bloc je n'ai plus d'erreur unexpected token mais la conversion donne un résultat farfelu car les variables attendues ne sont pas bonnes:
[[,[NaN,18432],,,[].

Mon problème, c'est que je ne sais pas transformer mon bloc [[0,[4456,4291],langue.pano1]","[0,[4546,4491],langue.pano2]] en var numbers = [[0,[4456,4291],langue.pano1]","[0,[4546,4491],langue.pano2]];.
Je vous mets dessous le code complet de la page si c’a peut vous aider à résoudre mon problème.

Code html : 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
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
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
<!DOCTYPE html>
<html>
<style>
        div#conv1 {
                float: left;
                width: 33%;
                margin-right: 10px;
                padding: 10px;
                background: lightsteelblue;
        }
 
        div#conv3 {
                float: right;
                width: 33%;
                margin-left: 10px;
                padding: 10px;
                background: skyblue;
        }
 
        div#conv2 {
                overflow: auto;
                padding: 10px;
                background: steelblue;
        }
</style>
<body>
	<div align=center style="font-size: larger; font-weight: bold;">OUTIL DE CONVERSION POUR MA MAP</div><br>
	<div align=center>
		<label for="arraytoconv">Array à convertir</label><br><br>
		<textarea id="arraytoconv" rows="15" cols="160" wrap="soft"></textarea><br><br><br>
		<label for="resultconv" style="font-weight: bold;">RESULTAT DE LA CONVERSION</label>
		<textarea id="resultconv" rows="15" cols="160" wrap="soft"></textarea><br><br>
	</div>
<div id="conv1">
<p>Conversion TMK : Inazuma 2.1 >>> 2.2</p>
 
<label for="xval">Décalage X:</label>
<input type="number" id="xval" value="0"><br><br>
<label for="lname">Décalage Y:</label>
<input type="number" id="yval" value="0"><br><br>
<button type="button" id="btn" onclick="conv1()">Convertir</button>
</div>
<div id="conv3">Conversion 3</div>
<div id="conv2">Conversion 2</div>
 
<script>
 
var text = "";
var counter = 1;
var langue = {};
for (i=1; i<250; i++) {
        var prefixe = "";
        if (i<10) {
                prefixe = "00";
        } else if (i<100) {
        prefixe = "0";
        }
        name = "com"+prefixe+i;
        langue[name]= "langue.com"+prefixe+i;
};
for (i=1; i<44; i++) {
        name = "pano"+i;
        langue[name]= "langue.pano"+i;
}
for (i=1; i<45; i++) {
        namea = "succest"+i;
        nameb = "succesh"+i;
        langue[namea]= "langue.succest"+i;
        langue[nameb]= "langue.succesh"+i;
}
for (i=1; i<27; i++) {
        name = "peche"+i;
        langue[name]= "langue.peche"+i;
}
 
langue.br= "+langue.br+";
langue.defib= "langue.defib+";
langue.defic= "langue.defic+";
langue.defik= "langue.defik+";
langue.defip= "langue.defip+";
langue.defis= "+langue.defis";
 
function conv1() {
        var numbers = [JSON.parse(document.getElementById("arraytoconv").value)];
        // var numbers = [[0,[4456,4291],langue.pano1],[0,[4546,4491],langue.pano2],[0,[4095,4168],langue.pano3]];
        numbers.forEach(myFunction);
        document.getElementById("resultconv").value = text;
};
 
function myFunction(item, index, arr) {
// document.getElementById("datas").innerHTML = index +" de "+ arr.length;
var coord = item[1];
var texte ="";
var texte2 ="";
var texte3 ="";
var x = (2*(3584 + coord[1]))-1024;
var y = (2*(9728 - coord[0]))-1024;
if (x<10000) {x=' '+x};
if (y<10000) {y=' '+y};
if (item[0]==5) {
        var texte = ',"'+item[2]+'"';
        var texte2 = (typeof item[3] !== 'undefined') ? ','+item[3] : "";
        var texte3 = (typeof item[4] !== 'undefined') ? ','+item[4] : "";
} else if (item[0]==12) {
    var texte = (typeof item[2] !== 'undefined') ? ',"'+item[2]+'"' : "";
} else {
        var texte2 = (typeof item[2] !== 'undefined') ? ','+item[2] : "";
        var texte3 = (typeof item[3] !== 'undefined') ? ','+item[3] : "";
};
var result = (index+1 !== arr.length) ? '['+item[0]+',['+x+','+y+']'+texte+texte2+texte3+'],' : '['+item[0]+',['+x+","+y+']'+texte+texte2+texte3+"]";
if (counter == 10 && index+1 !== arr.length) {
        result +='<br>';
    counter = 0;
    }
counter +=1;
text += result;
}
 
function test() {
        decalx = document.getElementById("xval").value;
        decaly = document.getElementById("yval").value;
 
        document.getElementById("datas").innerHTML = "Décalage X : "+decalx+" Décalage Y : "+decaly;
}
 
 
</script>
 
</body>
</html>

Par avance merci de votre aide