2013-03-30 3 views
2

Извините за вопрос нуб вопрос, но если у меня есть массив:Javascript индекс массива

MyArray["2cd"]="blah1"; 
MyArray["3cx"]="blah3"; 
MyArray["8cz"]="blah2"; 

И строку myStr="2cd"; А потом я использую MyArray [myStr], чтобы получить значение бла, как я могу получить число, к которому я обращаюсь в объекте/массиве или 0 в этом случае?

+0

Индекс - это номер. Вы можете получить доступ к MyArray [0] или MyArray [cd], если cd - это число или вам нужен parseInt («2cd», 10), и это вернет 2, чтобы MyArray [2] мог также работать. – frenchie

+0

«Индекс» представляет собой числовую строку (например, «0», «1», «2»). Для OP массивы javascript - это просто простые объекты со специальным свойством длины и методы, унаследованные от Array.prototype. Таким образом, вы можете использовать массив точно так же, как объект (не понравился, но отлично работает). Многие методы массива являются общими и могут использоваться на простых объектах с подходящими свойствами. – RobG

+0

Я создал демонстрацию jsfiddle из приведенного вами примера: http://jsfiddle.net/zxZTX/ –

ответ

3

Если я могу читать между строк, это звучит, как вы думаете, что код размещен:

MyArray["2cd"] = "blah1"; 
MyArray["3cx"] = "blah3"; 
MyArray["8cz"] = "blah2"; 

автоматически становятся эквивалентом:

MyArray[0] = MyArray["2cd"] = "blah1"; 
MyArray[1] = MyArray["3cx"] = "blah3"; 
MyArray[2] = MyArray["8cz"] = "blah2"; 

и, следовательно, вы можете получить строку "blah1" либо из этих двух способов:

var foo = MyArray[0]; // sets foo to "blah1" 
var bar = MyArray["2cd"] // also sets bar to "blah1" 

Но это не так, как Работает JavaScript.

Вы, конечно, может множество вещей, так что вы можете использовать мой MyArray[0] и MyArray["2cd"] принести такое же значение, но вы должны сделать это явно, как в моем примере.

Одна вещь, о которой вы не упомянули, - это то, как вы объявили . Это Array или Object? То есть, перед кодом вы в курсе, вы создали с:

var MyArray = {}; // or equivalently, var Array = new Object; 

или:

var MyArray = []; // or equivalently, var Array = new Array; 

Первый пример создает Object, второй Array.

Что немного сбивает с толку, так это то, что JavaScript имеет оба этих двух типа, что во многих случаях можно использовать несколько взаимозаменяемо. Но принято использовать Object, когда вы используете в объекте произвольные (как правило, но необязательно нечисловые) ключи, как в вашем примере. И наоборот, принято использовать Array, когда вы в основном используете строго числовые индексы.

Фактически, код Array JavaScript наследует от Object. Array это просто Object с некоторыми дополнительными поведением:

  • Array имеет дополнительные методы, такие как .push(), который присоединяет элемент в массиве.

  • Array имеет .length свойство, которое автоматически обновляется при добавлении элементов с .push() или прямой array[123] отчуждением или при удалении элементов с .pop() или другими методами.

Что JavaScript не имеет, а Fabrício указал, является «ассоциативный массив», который ведет себя так, как вы могли бы найти в некоторых других языках.Он имеет объекты и имеет массивы (которые наследуются от объектов), и вам приходится иметь дело с каждым из них на своих условиях.

+2

Вы можете начать с того, чтобы было ясно, что в JS нет ассоциативных массивов. –

+0

Определенно! Спасибо, что упомянули об этом. Я отправил свой оригинальный ответ с моего телефона, ожидая моей дочери в торговом центре, так что это было немного немного. Теперь, когда у меня есть клавиатура, я немного разбираюсь в массивах и объектах. –

Смежные вопросы