将String数组值转换为数组对象

时间:2009-06-23 19:49:04

标签: javascript google-maps

我正在将一个字符串传递到页面上的隐藏字段,然后将其拆分以尝试获取可以迭代的项目数组并将多个标记添加到Google地图上。如果我硬编码数组它工作正常,但如果我尝试拆分字符串并使用相同的代码它不起作用。我假设因为拆分字符串会创建一个字符串数组而不是Array对象。当我拆分字符串时,数组以“['Smith Company',33.61678,-111.90017]”结尾,并带有双引号。我如何转换这些项目,以便我可以像硬编码值一样使用它?

我在后面的代码中的StringBuilder中添加了方括号,单引号和vert bar。使用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]
                });
            }
        }

4 个答案:

答案 0 :(得分:2)

您将不得不使用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 evil以外的when it's not

答案 1 :(得分: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"];

答案 2 :(得分:0)

在你的情况下,它不适用于拆分,因为split会产生简单的数组,而在硬编码的情况下,你会使用数组的数组,这是略有不同的。您所要做的就是为每条记录定义另一个分隔符,然后首先按它分割,然后再用“|”分割。

我的意思是:

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...
}

答案 3 :(得分:0)

你可以做到

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

而不是

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

因为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(",");