Jquery 我的数组未定义

Jquery 我的数组未定义,jquery,html,arrays,leaflet,Jquery,Html,Arrays,Leaflet,我有以下问题代码是进一步向下。 当我这样做的时候 city[i] = response[i].name; 我可以打印出每个城市的名字。但是现在我想要一个多维数组,因为我想保存下面的代码 L.marker([response[i].lat, response[i].lon]).bindPopup(response[i].name); 我想我可以把它保存在一个多维数组中,所以我们举个例子 city[1]["CityName"] = "New York" city[1]["Locations"]

我有以下问题代码是进一步向下。 当我这样做的时候

city[i] = response[i].name;
我可以打印出每个城市的名字。但是现在我想要一个多维数组,因为我想保存下面的代码

L.marker([response[i].lat, response[i].lon]).bindPopup(response[i].name);
我想我可以把它保存在一个多维数组中,所以我们举个例子

city[1]["CityName"] = "New York"
city[1]["Locations"] =  L.marker([location]).bindPopup(name);
所以,现在当我打电话给城市[1]['Locations']时,我得到了L.标记,对吗

这是我的密码

function init()
{
region = 'all';
var url = "http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png",
    attribution = "(c) OSM contributors, ODBL";

var minimal = L.tileLayer(url, {styleID: 22677, attribution: attribution});
$.ajax
({
    type: 'GET',
    url: 'webservice.php',
    data: {region: region},
    success: function(response, textStatus, XMLHttpRequest) 
    { 
        var city = new Array();
        var lygStr = '';
        for(var i = 0; i < response.length; i++)
        {
            //alert(response[i].lat + " | " + response[i].lon + " | " + response[i].name);
            alert(response[i].name);
            city[i]["CityName"] = response[i].name;

            //L.marker([response[i].lat, response[i].lon]).bindPopup(response[i].name);
            if(i + 1 == response.length)
            {
                lygStr += city[i]["CityName"];
            }
            else
            {
                lygStr += city[i]["CityName"] + ", ";
            }
        }
        alert("Test" + lygStr);
        var cities = L.layerGroup([lygStr]);

        map = L.map("map1", 
        {
            center: new L.Latlng(resposne[1].lat, response[0].lon),
            zoom: 10,
            layers: [minimal, cities]
        });
    }
});

}
函数init()
{
区域='所有';
var url=“http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png”,
属性=“(c)OSM贡献者,ODBL”;
var minimal=L.tileLayer(url,{styleID:22677,attribute:attribute});
$.ajax
({
键入:“GET”,
url:'webservice.php',
数据:{region:region},
成功:函数(响应、textStatus、XMLHttpRequest)
{ 
var city=新数组();
var lygStr='';
对于(变量i=0;i
正确的初始化将解决此问题-您需要将位于
城市[i]
位置的对象初始化为保存您的值而不是未定义的对象

    var city = [];   // don't use new Array() !
    var lygStr = '';
    for(var i = 0; i < response.length; i++)
    {
        city[i] = {}; // you need to create an object here

        city[i]["CityName"] = response[i].name;

在声明城市[i]之前,您将其用作数组:

var city = []; // don't use the new Array(); syntax
var lygStr = '';

for(var i = 0; i < response.length; i++) {
    // before using city[i] as an array, you must declare it as an array
    city[i] = [];    

    city[i]["CityName"] = response[i].name;
    ...
var city=[];//不要使用新数组();语法
var lygStr='';
对于(变量i=0;i
在这行中看起来像:

city[1]["Locations"] =  L.marker([location]).bindPopup(name);
您的
城市[1][“位置”]
将设置为
。bindPopup(名称)
返回的任何值。这可能是
未定义的
,也可能是函数。该方法构造为返回其调用的对象吗?仅此而已:

city[1]["Locations"] =  L.marker([location]);
city[1]["Locations"].bindPopup(name);

你说的city[i]=[]是什么意思?当我还是这么说,但在数组中,正如你说的,我仍然在这行中得到一个错误
city[i][“CityName”]=response[i].name;
@devShuba这是一个拼写错误,你需要一个对象
{}
,而不是一个数组
[]
。这是一个简单的初始化问题;)实际上这里应该使用对象而不是数组。是的,但显然是错误的。数组有数字索引。此代码意外工作,因为您可以将属性附加到数组对象。请尝试以下代码:
city=[];city[“foo”]=“bar”;alert(city.length)//0,meeep
city[1]["Locations"] =  L.marker([location]);
city[1]["Locations"].bindPopup(name);