Javascript 我的关联数组不存储对象
似乎总是空的:Javascript 我的关联数组不存储对象,javascript,arrays,Javascript,Arrays,似乎总是空的: var idStruttura=2; var arrayMarkers=new Array(); arrayMarkers["sede_"+idStruttura] = "ciao"; alert(arrayMarkers.length); 打印始终为0。为什么?如何修复它呢?javascript中的数组(与php不同)不能有字符串键,只能有数字键。如果您想要字符串文字作为键,请使用对象。您需要的是一个简单的对象,而不是数组。数组具有数字索引 var markers = {}
var idStruttura=2;
var arrayMarkers=new Array();
arrayMarkers["sede_"+idStruttura] = "ciao";
alert(arrayMarkers.length);
打印始终为0。为什么?如何修复它呢?javascript中的数组(与php不同)不能有字符串键,只能有数字键。如果您想要字符串文字作为键,请使用对象。您需要的是一个简单的对象,而不是数组。数组具有数字索引
var markers = {};
markers['sede_' + id] = 'ciao';
还要注意的是,
{}
与新对象()
相同,[]
与新数组()
相同。总是使用前一个。这对任何JS开发人员来说都非常清楚。您创建的是一个常规数组对象,并在其中添加了一个名为sede\ux…
的属性。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';
存储对象时没有长度,只有在按预期使用数组时才有长度 试试这个()
阵列不是关联阵列,但是阵列对象是对象,并且所有对象都是关联阵列。如果将项分配给数组时使用字符串作为键,则不是将其用作数组,而是将其用作对象
数组的
length
属性返回您在数组中存储了多少项。如果还将数组对象用作关联数组,则不会影响将数组用作数组的方式。@markzzz它可以工作,因为您已使用该名称向数组对象添加了属性。它不是数组元素的一部分,就像您用迭代(i=0;i@markzzz您添加的属性更类似于array.length
属性,该属性包含有关数组的其他信息。是的。array
也是一个对象
。例如,这与PHP不同。您可以设置array
实例的任何成员属性,但它不会影响length
属性。只要记住JavaScript数组
具有用于数字索引的内容。嗯!所以我想我不能用.lenght=0清除这个对象。我如何才能清除它?不,你不能。你必须循环它的键并使用delete
语句。for(obj中的var key){if(obj.hasOwnProperty(key)){delete obj[key];}}}
arrayMarkers={};也会破坏它吗?是的,当然也可以。只需确保在应用程序的其他地方没有对原始对象的任何引用。但这不是你所要求的。
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)