我的关联数组不存储对象

时间:2012-02-08 13:28:58

标签: javascript arrays

It似乎总是空的:

var idStruttura=2;
var arrayMarkers=new Array();

arrayMarkers["sede_"+idStruttura] = "ciao";
alert(arrayMarkers.length);

总是打印0.为什么?我该如何解决?

5 个答案:

答案 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开发人员都清楚这一点。