You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaScript Google Maps Marker数组返回长度异常问题排查

问题:为什么数组cityMarkers的length始终为0?

你在JS里声明了数组cityMarkers,通过cityMarkers[element.name]添加Google地图Marker实例,但获取数组长度时结果一直是0,代码和控制台输出如下:

代码示例

var cityMarkers = []; 
cityMarkers[element.name] = new google.maps.Marker({ ... }); 

控制台输出

[Piacenza: _.te, Voghera: _.te, Valenza: _.te] 
Piacenza: _.te {__gm: {…}, gm_accessors_: {…}, position: _.K, gm_bindings_: {…}, map: Wf, …} 
Valenza: _.te {__gm: {…}, gm_accessors_: {…}, position: _.K, gm_bindings_: {…}, map: Wf, …} 
Voghera: _.te {__gm: {…}, gm_accessors_: {…}, position: _.K, gm_bindings_: {…}, map: Wf, …} 
length: 0 
__proto__: Array(0)

问题根源

你这里犯了一个常见的小误区:把JavaScript数组当成普通对象来用了。

JS里的数组本质上也是对象,但它的length属性只和数字索引的元素挂钩。当你用字符串(比如element.name的值Piacenza)作为键给数组赋值时,你其实是在给这个数组对象添加自定义属性,而不是往数组里添加真正的元素。这些属性不会被算进数组的length里,所以你看到的length始终是0——控制台里显示的那些城市名对应的Marker,都是数组对象的额外属性,不是数组的元素。

解决方案

根据你的需求,有两种修正方式:

1. 改用普通对象(推荐,如果你需要按城市名快速查找Marker)

直接把cityMarkers声明为对象,这样用字符串键赋值就是完全合理的:

var cityMarkers = {}; // 把数组改成普通对象
cityMarkers[element.name] = new google.maps.Marker({ ... }); 

之后要获取元素数量,可以用Object.keys(cityMarkers).length;要访问特定城市的Marker,直接用cityMarkers['Piacenza']或者cityMarkers.Piacenza即可。

2. 继续用数组(如果需要保持元素顺序或使用数组方法)

如果确实需要数组结构,就把每个城市名和对应的Marker包装成对象,用push方法添加到数组中:

var cityMarkers = [];
cityMarkers.push({
  cityName: element.name,
  marker: new google.maps.Marker({ ... })
});

这时cityMarkers.length就会正确显示元素数量。要找到特定城市的Marker,可以用数组的find方法:

const piacenzaMarker = cityMarkers.find(item => item.cityName === 'Piacenza').marker;

内容的提问来源于stack exchange,提问作者Giovanni Carrara

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:28:25