【问题标题】:Javascript multidimensional array: object gets replacedJavascript多维数组:对象被替换
【发布时间】:2014-07-15 08:38:15
【问题描述】:

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

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*/ }
           )
)

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

谢谢。

【问题讨论】:

  • 最好提供一些样本数据sekolah,所以我们不对结构做出假设。

标签: javascript arrays object multidimensional-array


【解决方案1】:

每次使用以前使用过的键调用 addMarker 时,都会覆盖markersN[key]。检查 makersN 中给定密钥的条目是否已经存在,如果不存在则仅初始化。

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

【讨论】:

  • 啊,我没注意声明。非常感谢,这解决了问题:)
【解决方案2】:

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

【讨论】:

    【解决方案3】:

    删除函数内部写的这一行,

    markersN[key] = {};
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-27
      • 2019-06-15
      • 2018-08-09
      • 2021-12-04
      • 2020-05-23
      • 2013-05-13
      • 2013-07-03
      • 2017-12-12
      相关资源
      最近更新 更多