2015-05-12 4 views
2

Если у меня есть набор пар ключ/значение, как это:JavaScript элементы массива доступа по значению объекта

WX Code  WMO WX Code Description 
-------  ----------------------- 
00  No significant weather 
04  Haze 
10  Mist 
20  Fog detected in last hour 
21  Precip detected in last hour 
22  Drizzle detected in last hour 
23  Rain detected in last hour 
24  Snow detected in last hour 

, что я хочу, чтобы получить доступ как массив целочисленным кодом, что является лучшим способом формат массив? Если бы я попробовать этот

var arrWXcodes = [ 
{00:"No significant weather"}, 
{04:"Haze"}, 
{10:"Mist"}, 
{20:"Fog detected in last hour"}, 
{21:"Precip detected in last hour"}, 
{22:"Drizzle detected in last hour"}, 
{23:"Rain detected in last hour"}, 
{24:"Snow detected in last hour"}]; 

И я пытаюсь получить доступ к массиву, чтобы получить, скажем, «Haze», как это так, я не понимаю, что я хочу. Я хочу, чтобы получить доступ к массиву по целочисленному значению этого ключа, а не позиции в массиве

arrWXcodes["04"] 
undefined 
arrWXcodes[04] 
Object { 21: "Precip detected in last hour" } 

Что бы лучше структура данных и методы доступа, чтобы иметь возможность использовать целочисленный ключ, чтобы получить доступ к массиву и получить ожидаемое значение?

+0

JavaScript объекты являются просто набор пар ключ/значение, поэтому Джеймс ответ ниже кажется, соответствует вашим потребностям. – Craicerjack

ответ

8

Отбросьте массив объектов и есть только один главный объект:

var arrWXcodes = { 
    "00": "No significant weather", 
    "04": "Haze", 
    ... 
} 

Вы можете получить доступ к ним свойства, используя arrWXcodes["00"] и т.д.

Причина вы получите другой результат, чем ожидалось, в вашем собственный код при передаче в целое число, потому что это ссылается на индекс массива, а не на имя свойства. 0 в приведенном выше примере - "No significant weather", тогда как "Haze" - 1, а не 4. Индекс 4 (5-й элемент в массиве) - это ваш объект со значением "Precip detected in last hour".

Если вы действительно хотите, чтобы иметь возможность получить доступ к значениям с целым числом можно преобразовать число в строку, используя "" + 4, однако это будет генерировать "4" и не "04", поэтому если ваши ключевые имена в этой структуре вы» d необходимо реализовать что-то вроде этого: How can I pad a value with leading zeros?

0

В принципе, вы определяете массив объектов. И если вы идете по индексу 04, это 5-й элемент: {21:"Precip detected in last hour"}. И индекс "04" не определен в массиве. Массив, как объект с целочисленным ключом и его значений: arrWXcodes={0:{00:"No significant weather"},1:{04:"Haze"}...}

Вместо того, чтобы использовать массив, вы должны использовать объект

arrWXcodes={ 
    "00":"No significant weather", 
    .... 
}; 
+1

, который не отвечает ни на какие вопросы пользователей. – Craicerjack

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