2009-06-23 128 views
1

我將一個字符串傳遞到頁面上的一個隱藏字段中,然後分割它以嘗試獲取可迭代的項目數組,並將多個標記添加到Google地圖上。如果我硬編碼數組,它的工作正常,但如果我嘗試拆分字符串並使用相同的代碼,它不起作用。我假設,因爲分割字符串創建一個字符串數組而不是數組對象。當我分割字符串時,數組以「['Smith Company',33.61678,-111.90017]」結尾,並用雙引號括起來。我將如何轉換這些項目,以便我可以像硬編碼值一樣使用它?將字符串數組值轉換爲數組對象

我在代碼後面的StringBuilder中添加方括號,單引號和垂直條。使用C#,如果它會有所作爲。我沒有這樣做,但仍然綠色與JavaScript,所以這是我最初的解決方案。我最初的字符串看起來像」

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

感謝。

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

給我們你傳遞的隱藏字段完全匹配的字符串。 – Triptych 2009-06-23 19:54:11

+0

我在後面的代碼中的StringBuilder中添加方括號,單引號和垂直條。使用C#,如果它會有所作爲。我沒有這樣做,但仍然綠色與JavaScript,所以這是我最初的解決方案。 ['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] – 2009-06-23 19:58:17

回答

1

你將不得不使用eval()轉換的數組實際的JavaScript數組的字符串表示形式。

此代碼應該工作:

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

請注意,除了eval is evilwhen it's not

0

在你的情況下,它不會分裂工作,因爲分裂產生你簡單的數組,而你硬編碼的情況下,你使用。陣列陣列,這是輕微的不同所有你必須做的是確定另一個分隔符爲每個記錄和第一分裂通過它,只有再由分裂「|」

我的意思是:

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

你可以做的

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

代替

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

爲分割函數會返回一個字符串數組。如果你可以發佈hdnString的值,我可以進一步提供幫助,但是看看你的代碼,你需要一個數組數組。

編輯:

假設

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

像下面將讓你的陣列

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

這是正確的,我的hdnString值是:''Jones Company',26.16683,-98.23342] ',29.70008,-98.03347] [['Blue Company',37.71675,-122.21672] | ['Red Company',42.46692,-114.48342] – 2009-06-23 20:11:43

+0

取出方括號,您不需要使用eval() – 2009-06-23 20:23:03

1

您可能要嘗試在隱藏字段中使用JSON格式的文本。然後,您可以將JSON解析爲真正的JavaScript對象。如果我理解你的隱藏字段正確,你將只需要一個字符串,它看起來像

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

然後在javascript:

// this is an array 
var myItems = JSON.parse(document.getElementById("myItemList").value)["myItems"]; 
相關問題