2009-06-23 18 views
1

Ich übergebe eine Zeichenfolge in ein verborgenes Feld auf der Seite und teile sie dann auf, um ein Array von Elementen zu erhalten, über die ich iterieren und mehrere Markierungen zu einer Google-Map hinzufügen kann. Wenn ich das Array fest codiere, funktioniert es gut, aber wenn ich versuche, den String zu teilen und den gleichen Code zu verwenden, funktioniert es nicht. Ich nehme an, da das Teilen der Zeichenfolge ein Zeichenfolgenarray anstelle von Array-Objekten erstellt. Wenn ich die Zeichenfolge aufspalte, endet das Array mit "['Smith Company', 33.61678, -111.90017]" mit den doppelten Anführungszeichen. Wie würde ich diese Elemente konvertieren, so dass ich sie genauso verwenden kann wie die fest codierten Werte?String-Array-Werte in Array-Objekt umwandeln

Ich füge die eckigen Klammern, einfache Anführungszeichen und vert bar in einem StringBuilder in den Code hinter. Verwenden Sie C# für das, wenn es einen Unterschied machen wird. Ich bin nicht damit verheiratet, es so zu machen, aber immer noch grün mit JavaScript, also war das meine erste Lösung. Meine erste String sieht wie folgt aus“

"['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]" 

Dank.

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

Geben Sie uns die genaue Zeichenfolge Sie in dem verborgenen Bereich vorbei. – Triptych

+0

Ich füge die eckigen Klammern, einfache Anführungszeichen und vert Balken in einem StringBuilder in dem Code dahinter. Verwenden Sie C# für das, wenn es einen Unterschied machen wird. Ich bin nicht damit verheiratet, es so zu machen, aber immer noch grün mit JavaScript, also war das meine erste Lösung. ['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] –

Antwort

1

Sie gehen zu müssen, bekommen eval() verwenden, um die konvertieren String-Darstellungen von Arrays zu tatsächlichen Javascript-Arrays.

Dieser Code funktionieren sollte:

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])); 
} 

Sie beachten Sie, dass eval is evil außer when it's not.

+0

Do nicht verwenden Sie haben einen Vorschlag für einen besseren Ansatz? Das grundlegende Problem ist eine Liste der Speicherorte in einer Datenbank, die ich herausholen und durchlaufen möchte, um Marker zur Karte hinzuzufügen. Danke für die Hilfe. –

0

In Ihrem Fall ist es nicht mit Splitting nicht funktioniert, weil Split Sie einfach Array erzeugen, während bei Ihnen hart codiert Fall, dass Sie die Verwendung . Array von Arrays, die verschiedene gering ist Alles, was Sie tun müssen, ist eine andere Trennzeichen für jeden Datensatz und erste Spaltung durch und durch gespalten nur dann zu definieren, „|“

ich meine:.

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

können Sie tun nur

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

statt

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

wie die Split-Funktion ein Array von Strings zurück. Wenn Sie den Wert von hdnString posten könnten, könnte ich Ihnen vielleicht weiterhelfen, aber wenn Sie sich Ihren Code ansehen, möchten Sie ein Array von Arrays.

EDIT:

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|"; 

so etwas wie die folgenden Unter der Annahme, finden Sie eine Reihe von Arrays

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

Das stimmt, mein hdnString-Wert lautet: ['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

entfernen Sie die eckigen Klammern, und Sie müssen eval() –

1

Sie können versuchen, JSON formatierten Text in Ihrem versteckten Feld zu verwenden. Dann können Sie den JSON in echte JavaScript-Objekte zerlegen.Wenn ich Ihre verborgenen Feld richtig verstehen würden Sie nur eine Zeichenfolge benötigen, die

<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] 
     ]}"/> 

Dann in Javascript wie

aussieht:

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

Ich habe diese Methode versucht, bekomme aber eine Fehlermeldung, dass JSON nicht definiert ist. –

+0

Hallo Ryan, du brauchst die JSON.js-Datei, die in der Antwort verlinkt ist. Alternativ können Sie die Zeichenfolge eval() verwenden. – Clint

+0

Ah, ein Hirn-Schluckauf, danke Clint, ich schätze die Hilfe. Ich werde es noch einmal versuchen. –