JavaScript多维数组不能作为数组访问,只能作为字符串访问

JavaScript multidimensional array cannot access as array, only as string

本文关键字:访问 数组 字符串 JavaScript 不能      更新时间:2023-09-26

我试图在谷歌地图上放置多个标记。我有JS构建一个数组,并将其传递给处理标记的Google函数。问题是,当我试图访问假定的数组时,我只得到第一个字符,就好像它是一个字符串。

$(document).ready(function () {
    // initialize map to center on florida.
    initializeGMap();
    var locations = [];
    @foreach (var item in Model)
        {
            <text>        
            locations.push(@Html.Raw(Json.Encode("'" + item.Name + "'," + item.Location.Latitude + "," + item.Location.Longitude + "")));
            </text>
        }
    addMarker(locations);
});

我已经尝试了包括JSON在内的几种(阅读:20+)变体。在发送前、发送后等进行字符串化。下面是传递给它的函数:

function addMarker(locations) {
    var locations = JSON.stringify(locations);
    alert(locations + ''n' + locations[0][0] + ''n' + locations[0][1]);
    var infowindow = new google.maps.InfoWindow();
    var marker, i;
    for (i = 0; i < locations.length; i++) {
        marker = new google.maps.Marker({
            position: new google.maps.LatLng(locations[i][1], locations[i][2]),
            map: map
        });
        google.maps.event.addListener(marker, 'click', (function (marker, i) {
            return function () {
                infowindow.setContent(locations[i][0]);
                infowindow.open(map, marker);
            }
        })(marker, i));
    }
    alert("done");
}

当它到达'locations[x][x]'行时,我所得到的都是'[',这是JSON字符串的第一个字符。它不是在数组中处理的。我错过了什么?

我通过:

$(document).ready(function () {
    // initialize map to center on florida.
    initializeGMap();
    // serialize model locations
    var locationsToPass = @Html.Raw(Json.Encode(Model.Select(x => new { x.Name, x.Location.Latitude, x.Location.Longitude })));
    addMarker(locationsToPass);
});

,在接收函数中:

    function addMarker(locations) {
    var infowindow = new google.maps.InfoWindow();
    var marker, i;
    for (i = 0; i < locations.length; i++) {
        marker = new google.maps.Marker({
            position: new google.maps.LatLng(locations[i].Latitude, locations[i].Longitude),
            map: map
        });
        google.maps.event.addListener(marker, 'click', (function (marker, i) {
            return function () {
                infowindow.setContent(locations[i].Name);
                infowindow.open(map, marker);
            }
        })(marker, i));
    }
}

故障排除的关键是使用它来检测我是否传递了一个数组:

variable.constructor === Array