Javascript 我想在散列映射中动态插入值

Javascript 我想在散列映射中动态插入值,javascript,jquery,Javascript,Jquery,并从for循环中添加迭代器值 var markerList1={}; var markerList=[]; 无论何时调用函数,我都希望将数组的值附加到相同的索引中 markerList1[数据[11]].推送(vmarks) 但我没有得到上面的结果,当我标记list1[data[11])时,我只得到最后一个值,即thirdvmark 我想要这样的输出=markerList1[data[11]={firstvmark,secondvmark,thirdvmark};您不能将推送到对象marker

并从for循环中添加迭代器值

var markerList1={};
var markerList=[];
无论何时调用函数,我都希望将数组的值附加到相同的索引中 markerList1[数据[11]].推送(vmarks)

但我没有得到上面的结果,当我标记list1[data[11])时,我只得到最后一个值,即thirdvmark


我想要这样的输出=markerList1[data[11]={firstvmark,secondvmark,thirdvmark};

您不能将
推送到对象
markerList1
,只能推送到数组

改变这个

function addSomething() // this function will multiple times from a for loop
    {

        image ='../css/abc/'+image[iterator]+'.png';
        var data = respData[iterator];
        var box = getbox(data);
        var markerOpts = {  
            position : coordinates[iterator],
            map      : map,
            icon     :image,
            title    :data[1],  
            id       : data[11]
        };

        var vmarks = new google.maps.Marker(markerOpts);

        markerList.push(vmarks);            
        markerList1[markerOpts.title].push(vmarks);
    }
对此

markerList1[markerOpts.title].push(vmarks);`

markerList1[data[11]]
在您将某些内容推入内部之前,不会初始化

您只能通过简单的测试对其进行一次初始化:

markerList1[markerOpts.title] = vmarks;
或者以更短、更安全的方式:

if (! (data[11] in markerList1) ) {
    markerList1[data[11]] = [];
}
markerList1[data[11]].push(vmarks);
(请将
数据[11]
放入变量中)

试试这个-

markerList1[data[11]] = markerList1[data[11]] || [];
markerList1[data[11]].push(vmarks);

不存在这样的东西,
{firstvmark,secondvmark,thirdvmark}
..
{}
是一个键/值对象,而不是一个数组当您执行
标记列表1[data[11]]时是否有任何错误。推送(vmarks)
?如果是,什么错误?@vsync请不要将您的解决方案放入编辑中,现在我们看不到原始问题。@Volune-我没有这样做。我以可读的方式组织了他的代码,没有做任何更改。我觉得您有点粗鲁。@vsync提取
newmarkerOpts
对象并替换
数据[11]
by
markerOpts.title
。我不确定在编辑中进行重构是否有助于作者理解为什么这种重构是好的,或者是否有助于人们给出适合作者编程水平的答案。此外,现在,代码不再与文本“我想将数组的值附加到相同的索引markerList1[data[11]”一致。按(vmarks)“我可以根据用户id在一个对象的索引中存储多个值吗?我必须隐藏/删除多个标记
markerList1[data[11]]
将是一个数组,因此对于每个id,您可以放置任意多个标记。
        var vmarks = new google.maps.Marker(markerOpts);
        markerList.push(vmarks);//you already pushing vmarks to array            
        markerList1[markerOpts.title]=markerList;//assign array to your markerList1 map