It似乎总是空的:
var idStruttura=2;
var arrayMarkers=new Array();
arrayMarkers["sede_"+idStruttura] = "ciao";
alert(arrayMarkers.length);
总是打印0.为什么?我该如何解决?
答案 0 :(得分:3)
存储对象时没有长度,只有在按预期使用数组时才会存在长度。
试试这个(DEMO)
var idStruttura=2;
var arrayMarkers={}; // creates a more appropriate object than []
arrayMarkers["sede_"+idStruttura] = "ciao";
arrayMarkers["sede_"+(++idStruttura)] = "espresso";
var len = 0;
for (var o in arrayMarkers) {
if (arrayMarkers.hasOwnProperty(o)) len++;
}
arrayMarkers.length=len
alert(arrayMarkers.length)
答案 1 :(得分:2)
您创建的是一个常规数组对象,并为其添加了一个名为sede_...
的属性。 JavaScript不像PHP这样的语言使用关联数组。数组是可以具有属性的对象,但这些属性不属于数字索引的数组元素。
var idStruttura=2;
var arrayMarkers=new Array();
// Push an object onto the array having one property:
arrayMarkers.push({"sede_" + idStruttura : "ciao"});
// Or declare it as an object to begin with:
// This makes more sense....
var objMarkers = {};
objMarkers['sede_' + id] = 'ciao';
答案 2 :(得分:2)
数组不是关联数组,但数组对象是对象,所有对象都是关联数组。如果在将项目分配给数组时使用字符串作为键,则不将其用作数组,而是将其用作对象。
数组的length
属性返回您在数组中存储的项目数。如果您还将数组对象用作关联数组,则不会影响将数组用作数组的方式。
答案 3 :(得分:1)
javascript中的数组(与php不同)不能有字符串键,只能使用数字键。如果您想要字符串文字作为键,请使用对象
答案 4 :(得分:1)
您需要的是一个简单的对象,而不是一个数组。数组有数字索引。
var markers = {};
markers['sede_' + id] = 'ciao';
另请注意,{}
与new Object()
相同,[]
与new Array()
相同。始终使用前者。任何JS开发人员都清楚这一点。