2012-02-08 2 views

ответ

2

Массив не является ассоциативным массив, однако объект массива является объектом, и все объекты являются ассоциативными массивами. Если вы используете строку как ключ при назначении элементов массиву, вы не используете его как массив, вы используете его как объект.

Свойство массива length возвращает количество элементов, которые вы сохранили в массиве. Если вы также используете объект массива как ассоциативный массив, это не повлияет на то, как вы используете массив как массив.

1

массив в javascript (в отличие от php) не может иметь строковые ключи, только цифровые клавиши. Если вам нужен строковый литерал в качестве ключа, используйте объекты

+0

? Это работает http://jsfiddle.net/Xtmab/ – markzzz

+0

Но это не то, о чем вы просите. – mplungjan

1

Что вам нужно, это простой объект, а не массив. Массивы имеют числовые индексы.

var markers = {}; 
markers['sede_' + id] = 'ciao'; 

Также отметим, что {} такая же, как и new Object()[] такая же, как new Array(). Всегда используйте прежние. Это ясно для любого разработчика JS.

+0

Умм? Это работает ... http://jsfiddle.net/Xtmab/ – markzzz

+0

Да. 'Array' также является« объектом ». Это отличается от PHP, например. Вы можете установить любое свойство-член экземпляра 'Array', но оно не влияет на свойство' length'. Просто помните, что JavaScript 'Arrays' для файлов с числовыми индексами. –

+0

Ух! Поэтому я думаю, что я не могу очистить этот объект с помощью .lenght = 0. Как я могу его очистить? – markzzz

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'; 
+0

Так почему это работает? http://jsfiddle.net/Xtmab/ – markzzz

+0

@markzzz Это работает, потому что вы добавили свойство к объекту массива с этим именем. Это _not_ часть элементов массива, например, вы должны перебирать цикл 'for (i = 0; i

+0

@markzzz Свойство, которое вы добавили, больше похоже на свойство 'array.length', которое содержит дополнительную информацию о массиве. –

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) 
Смежные вопросы