Javascript多维数组:对象被替换

时间:2014-07-15 08:38:16

标签: javascript arrays object multidimensional-array

我有一个函数应该在二维数组中分配一个对象。不知何故,赋值会覆盖数组中的前一个对象。

var markersN = {};
var markersNArray = []

function addMarkerN(lat, lng, id, name, key) {
    markersN[key] = {};
    var newMark = new google.maps.Marker({
        /*marker properties*/
    });
    markersNArray.push(newMark);     //This pushes every object to a one dimensional array just fine
    markersN[key][id] = newMark;     //This replaces the previous object in the markersN[key] array
}

这就是我调用函数的方式:

for(var j=0; j<sekolah[i].nonlat.length; j++){
        addMarkerN(sekolah[i].nonlat[j], sekolah[i].nonlon[j], j, sekolah[i].nonname[j], sekolah[i].key);
    }

这就是我想要的数组:

Array 
(
    [0] => Array
           (
               [0] => { /*marker object*/ }
               [1] => { /*marker object*/ }
           )
)

这就是它的结果:

Array 
(
    [0] => Array
           (
               [1] => { /*marker object*/ }
           )
)

我在这里做错了吗?如何防止该函数覆盖数组中的上一个对象?

谢谢。

3 个答案:

答案 0 :(得分:0)

您在addMarkerN函数中分配markersN[key] = {};,因此每次调用此函数时,分配给空数组的markersN[key]

答案 1 :(得分:0)

删除在函数内写入的这一行

markersN[key] = {};

答案 2 :(得分:0)

每次使用之前使用过的密钥调用addMarker时,都会覆盖markerN [key]。检查给定密钥的makerN中是否存在条目,并且只有在不是这种情况时才进行初始化。

if (typeof markersN[key] === 'undefined') {
  markersN[key] = {};
}