Ключи из переменных в многомерных структурах JavaScript

Пусть дан следующий объект:

let obj = { 'ru': ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'], 'en': ['mn', 'ts', 'wd', 'th', 'fr', 'st', 'sn'], };

Давайте выведем какой-нибудь элемент из нашего объекта, например, элемент 'чт':

let obj = { 'ru': ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'], 'en': ['mn', 'ts', 'wd', 'th', 'fr', 'st', 'sn'], }; console.log(obj['ru'][3]);

Пусть теперь язык и номер дня хранятся в переменных:

let lang = 'ru'; let day = 3;

Выведем с помощью наших переменных какой-нибудь день недели:

let obj = { 'ru': ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'], 'en': ['mn', 'ts', 'wd', 'th', 'fr', 'st', 'sn'], }; let lang = 'ru'; let day = 3; console.log(obj[lang][day]);

Дан следующий объект с названиями месяцев:

let months = { 'ru': [ 'январь', 'февраль', 'март', 'апрель', 'май', 'июнь', 'июль', 'август', 'сентябрь', 'октябрь', 'ноябрь', 'декабрь', ], 'en': [ 'january', 'february', 'march', 'april', 'may', 'june', 'july', 'august', 'september', 'october', 'november', 'december', ], };

Даны также следующие переменные:

let lang = 'ru'; // может быть или 'ru' или 'en' let month = 5; // число от 0 до 12

Выведите на экран название месяца, соответствующее значениям переменных lang и month.

Дана вот такая структура для хранения списка дел за года, месяцы и дни:

let affairs = { '2018': { 11: { 29: ['дело111', 'дело112', 'дело113'], 30: ['дело121', 'дело122', 'дело123'], }, 12: { 30: ['дело211', 'дело212', 'дело213'], 31: ['дело221', 'дело222', 'дело223'], }, }, '2019': { 12: { 29: ['дело311', 'дело312', 'дело313'], 30: ['дело321', 'дело322', 'дело323'], 31: ['дело331', 'дело332', 'дело333'], } }, }

Пусть даны также 3 переменные, содержащие год, месяц и день. Выведите дело, соответствующее значениям переменных.

Подводный камень с ключами объектов

Пусть у нас опять дан наш объект с днями и переменные с языком и номером дня:

let obj = { 'ru': ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'], 'en': ['mn', 'ts', 'wd', 'th', 'fr', 'st', 'sn'], }; let lang = 'ru'; let day = 3; console.log(obj[lang][day]);

Сейчас я хочу обратить ваше внимание на распространенные ошибки, возникающие в подобном коде.

Ошибка первая - имена переменных не следует брать в кавычки:

let obj = { 'ru': ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'], 'en': ['mn', 'ts', 'wd', 'th', 'fr', 'st', 'sn'], }; let lang = 'ru'; let day = 3; console.log(obj['lang']['day']); //!! так делать неправильно

Ошибка вторая - имена переменных нельзя записывать как свойства объекта:

let obj = { 'ru': ['пн', 'вт', 'ср', 'чт', 'пт', 'сб', 'вс'], 'en': ['mn', 'ts', 'wd', 'th', 'fr', 'st', 'sn'], }; let lang = 'ru'; let day = 3; console.log(obj.lang[day]); //!! так делать неправильно

Автор следующего кода хотел вывести элемент со значением '24':

let obj = { key1: { key2: '12', key3: '13', }, key2: { key4: '24', key5: '25', }, } let key1 = 'key2'; let key2 = 'key4'; console.log(obj['key1'][key2]);

Код, однако, выводит не то, что ожидал автор. Исправьте ошибку.

Автор следующего кода хотел вывести элемент со значением '24':

let obj = { key1: { key2: '12', key3: '13', }, key2: { key4: '24', key5: '25', }, } let key1 = 'key2'; let key2 = 'key4'; console.log(obj.key1.key2);

Код, однако, выводит не то, что ожидал автор. Исправьте ошибку.

Автор следующего кода хотел вывести элемент со значением '24':

let obj = { key1: { key2: '12', key3: '13', }, key2: { key4: '24', key5: '25', }, } let key1 = 'key2'; let key2 = 'key4'; console.log(obj.key1['key2']);

Код, однако, выводит не то, что ожидал автор. Исправьте ошибку.

Автор следующего кода хотел вывести элемент со значением '24':

let obj = { key1: { key2: '12', key3: '13', }, key2: { key4: '24', key5: '25', }, } let key1 = 'key2'; console.log(obj['key1']['key4']);

Код, однако, выводит не то, что ожидал автор. Исправьте ошибку.