2010-12-12 2 views
0

У меня есть массив объекта, который, кажется, не обновляется по длине. Что я не знаю о массивах Javascript?Длина массива Javascript не меняется

http://stackoverflow.pastebin.com/aqZtRkkf

Длина сообщается как 0, и он показывает массив, как пустой, но console.log показывает, как имеющие индексы массива!

Что я не понимаю об этих массивах?

Спасибо за ваше время! : + D

ответ

5
this.Hats[ "Red" ] = new Hat(oPar, "red") 
    this.Hats[ "Yellow" ] = new Hat(oPar, "yellow"); 

Это ваша проблема. Вы не используете массив как массив, вы просто используете его как объект, устанавливая свойства Hats.Red и Hats.Yellow вместо заполнения индексов массива.

Попробуйте это:

this.Hats.push(new Hat(oPar, "red")); 
    this.Hats.push(new Hat(oPar, "yellow")); 

The push function in javascript

+0

Спасибо, нет способа использовать строку в качестве индекса массива? – dab

+0

Вы можете использовать массив в качестве словаря, назначая элементы со строковыми индексами. Это не повлияет на свойство length массива, но вы можете получить длину всех ключей словаря, используя один из этих методов. http://stackoverflow.com/questions/5223/length-of-javascript-associative-array –

+0

Если вы собираетесь это делать, вы даже не должны использовать Array ([]) ... просто используйте Object ({}). Объекты JavaScript - словари. Вы не получаете методы массива с ними, но вы получаете строковые ключи. Это похоже на то, что вы хотите. – Zach

1

Вы используете ассоциативный массив. Этот тип массива позволяет вам определить ключ для каждого элемента массива. Использование массива таким образом означает, что нет значения индекса, по которому вы можете пересечь членов, вместо этого вы можете использовать for (var i in object).

for (var key in test.People["Fred"].Hats) { 
    console.log(key); 
} 
Смежные вопросы