2009-06-23 7 views
1

Je passe une chaîne dans un champ masqué de la page, puis je la divise pour essayer d'obtenir un tableau d'éléments que je peux parcourir et ajouter plusieurs marqueurs sur une carte google. Si je code dur le tableau, cela fonctionne bien, mais si j'essaie de séparer la chaîne et d'utiliser le même code, cela ne fonctionne pas. Je suppose que la séparation de la chaîne crée un tableau de chaînes à la place des objets Array. Quand je divise la chaîne, le tableau se termine par "['Smith Company', 33.61678, -111.90017]" avec les guillemets autour de lui. Comment convertir ces éléments pour que je puisse les utiliser de la même manière que les valeurs codées en dur?Transformer les valeurs des tableaux de chaînes en objet tableau

J'ajoute les crochets, les guillemets simples et la barre verte dans un StringBuilder dans le code qui suit. Utiliser C# pour ça si ça va faire la différence. Je ne suis pas marié pour le faire de cette façon, mais toujours vert avec JavaScript alors c'était ma première solution. Ma chaîne initiale ressemble à ceci »

"['Jones Company', 26.16683, -98.23342]|['Smith Company', 33.61678, -111.90017]|['Bob Company', 29.70008, -98.03347]|['Blue Company', 37.71675, -122.21672]|['Red Company', 42.46692, -114.48342]" 

Merci.

function initialize() { 
     var myOptions = { 
      zoom: 4, 
      center: new google.maps.LatLng(26.16683, -98.23342), 
      mapTypeId: google.maps.MapTypeId.ROADMAP 
     }; 

     var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions); 

     //What I try to use when the hard coded is commented out 
     var myString = document.getElementById('hdnString').value; 
     var myItems = new Array(); 
     myItems = myString.split("|"); 

     //Hard coded items that I comment out when trying the above 
     var myItems = [ 
      ['Jones Company', 26.16683, -98.23342], 
      ['Smith Company', 33.61678, -111.90017], 
      ['Bob Company', 37.71675, -122.21672], 
      ['Blue Company', 42.46692, -114.48342], 
      ['Red Company', 36.58339, -121.8335] 
     ]; 

      // Add markers to the map 
      for (var i in myItems){ 
       var myLatLng = new google.maps.LatLng(myItems[i][1], myItems[i][2]); 
       var marker = new google.maps.Marker({ 
        position: myLatLng, 
        map: map, 
        title: myItems[i][0] 
       }); 
      } 
     } 
+0

Donnez-nous la chaîne exacte vous passez dans le champ caché. – Triptych

+0

J'ajoute les crochets, les guillemets simples et la barre verte dans un StringBuilder dans le code derrière. Utiliser C# pour ça si ça va faire la différence. Je ne suis pas marié pour le faire de cette façon, mais toujours vert avec JavaScript alors c'était ma première solution. ['Jones Company', 26.16683, -98.23342] | ['Smith Company', 33.61678, -111.90017] | ['Bob Company', 29.70008, -98.03347] | ['Blue Company', 37.71675, -122.21672] | ['Red Company', 42.46692, -114.48342] –

Répondre

1

Vous allez devoir utiliser eval() pour convertir le représenter par des chaînes de tableaux des tableaux javascript réels.

Ce code devrait fonctionner:

var myString = document.getElementById('hdnString').value; 
var myItems = []; 
var rawItems = myString.split("|"); 

for (var i=0; i<rawItems.length; i++){ 
    myItems.push(eval(rawItems[i])); 
} 

Notez que la eval is evil sauf when it's not.

+0

Do vous avez une suggestion pour une meilleure approche? Le problème de base est la liste des emplacements dans une base de données que j'essaie de sortir et de faire une boucle pour ajouter des marqueurs à la carte. Merci pour l'aide. –

0

Dans votre cas, il ne fonctionne pas avec le fractionnement, parce que vous produisez divisé tableau simple, alors que dans le cas que vous vous utilisez codés de manière irréversible la . tableau de tableaux, ce qui est légèrement différente Tout ce que vous avez à faire est de définir un autre séparateur pour chaque enregistrement et la première division par et seulement alors divisé par « | »

Je veux dire:.

var string = "first record|valueA|valueB;second record|valueA|valueB"; 
var firststep = string.split(";"); 
for (var tmp in firststep) 
{ 
    secondstep = tmp.split("|"); 
    //secondstep[0] = first record; secondstep[1] = valueA and etc... 
} 
0

Vous pouvez juste faire

var myItems = myString.split("|"); 

au lieu de

var myItems = new Array(); 
myItems = myString.split("|"); 

que la fonction split retourne un tableau de chaînes. Si vous pouviez poster quelle est la valeur de hdnString, je pourrais peut-être vous aider, mais en regardant votre code, vous voulez un tableau de tableaux.

EDIT:

En supposant

hdnString = "'Jones Company', 26.16683, -98.23342| 
      'Smith Company', 33.61678, -111.90017| 
      'Bob Company', 37.71675, -122.21672| 
      'Blue Company', 42.46692, -114.48342| 
      'Red Company', 36.58339, -121.8335|"; 

quelque chose comme ce qui suit vous obtiendrez un tableau de tableaux

var myItems = hdnString.split("|"); 
for(var i = 0; i< myItems.length; i++) 
    myItems[i] = myItems[i].split(","); 
+0

C'est exact, ma valeur hdnString est: ['Jones Company', 26.16683, -98.23342] | ['Smith Company', 33.61678, -111.90017] | 'Bob Company ', 29.70008, -98.03347] | [' Blue Company ', 37.71675, -122.21672] | [' Red Company ', 42.46692, -114.48342] –

+0

supprime les crochets et vous n'aurez pas besoin d'utiliser eval() –

1

Vous pouvez essayer d'utiliser le texte formaté JSON dans votre champ masqué. Ensuite, vous pouvez analyser le JSON en véritables objets JavaScript.Si je comprends bien vous correctement votre champ caché juste besoin d'une chaîne qui ressemble

<input id="myItemList" type="hidden" value="{'myItems' = [ 
      ['Jones Company', 26.16683, -98.23342], 
      ['Smith Company', 33.61678, -111.90017], 
      ['Bob Company', 37.71675, -122.21672], 
      ['Blue Company', 42.46692, -114.48342], 
      ['Red Company', 36.58339, -121.8335] 
     ]}"/> 

Puis en javascript:

// this is an array 
var myItems = JSON.parse(document.getElementById("myItemList").value)["myItems"]; 
+0

J'ai essayé cette méthode mais j'obtiens une erreur indiquant que JSON n'est pas défini. –

+0

Salut Ryan, vous avez besoin du fichier JSON.js lié à la réponse. Alternativement, vous pouvez eval() la chaîne. – Clint

+0

Ah, un hoquet de cerveau, merci Clint, j'apprécie l'aide. Je vais recommencer. –

Questions connexes