JavaScript « Получить значение в ассоциативном массиве javascript

Не получается вывести значение в ассоциативном массиве
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }

var massiv = {
   'до 23 лет':{'менее 2-х лет':1.7, 'от 2 лет до 4 лет':1.3, 'от 4 лет до 10 лет':1.15, 'от 10 лет и выше':0},
   'от 23 лет до 28 лет':{'менее 2-х лет':1.5, 'от 2 лет до 4 лет':1.1, 'от 4 лет до 10 лет':1, 'от 10 лет и выше':0.95},
   'от 28 лет до 33 лет':{'менее 2-х лет':1.5, 'от 2 лет до 4 лет':1.0, 'от 4 лет до 10 лет':0.97, 'от 10 лет и выше':0.9},
   'от 33 лет до 60 лет':{'менее 2-х лет':1.4, 'от 2 лет до 4 лет':1.0, 'от 4 лет до 10 лет':0.92,'от 10 лет и выше':0.85},
   'от 60 лет и выше':{'менее 2-х лет':1.5, 'от 2 лет до 4 лет':1.0, 'от 4 лет до 10 лет':0.92, 'от 10 лет и выше':0.9}
};
 

Вывод делаю так
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .javascript.geshi_code {font-family:monospace;} .javascript.geshi_code .imp {font-weight: bold; color: red;} .javascript.geshi_code .kw1 {color: #000066; font-weight: bold;} .javascript.geshi_code .kw2 {color: #003366; font-weight: bold;} .javascript.geshi_code .kw3 {color: #000066;} .javascript.geshi_code .co1 {color: #006600; font-style: italic;} .javascript.geshi_code .co2 {color: #009966; font-style: italic;} .javascript.geshi_code .coMULTI {color: #006600; font-style: italic;} .javascript.geshi_code .es0 {color: #000099; font-weight: bold;} .javascript.geshi_code .br0 {color: #009900;} .javascript.geshi_code .sy0 {color: #339933;} .javascript.geshi_code .st0 {color: #3366CC;} .javascript.geshi_code .nu0 {color: #CC0000;} .javascript.geshi_code .me1 {color: #660066;} .javascript.geshi_code span.xtra { display:block; }

   var a = 'до 23 лет';
   var b = 'менее 2-х лет';

   console.log(massiv.a.b);
 

Вылетает ошибка: massiv.a is undefined

1 ответов


"Undefined" вы получаете потому, что неправильно работаете с объектом (ассоциативным массивом) в вашем конкретном случае. Я вам объясню почему.

Во-первых, получить доступ к свойствам JavaScript объектов можно двумя путями:
  1. Используя нотацию "точка", как сделали вы
  2. Используя квадратные скобки "[]", как продемонстрировал webdevfan

Но при доступе к определённому свойству вашего объекта вы не учли одного важного факта. А именно:

Именами свойств JS объектов могут быть JS строки, или всё, что может быть cконвертировано в строки, включая пустую строку " ". Однако если имя свойства - не валидный JavaScript идентификатор (например имя, содержащее пробелы или тире, или начинается с числа), то получить доступ к такому свойству можно только через квадратные скобки.

Так что если хотите использовать такие строки в качестве имён в вашем объекте, то делайте как подсказал вам webdevfan.

Иначе можно делать так, исходя из моего краткого описания работы с объектами выше:

var obj = {
  "приветМосква": 12
};

alert( obj.приветМосква ); // выдаст 12
 

var a = 'до 23 лет';
var b = 'менее 2-х лет';

console.log(massiv[a][b]);