• Теория
  • Теория

Объект как словарь

Теперь посчитаем цену компьютера. Она состоит из нескольких слагаемых: стартовой цены и стоимости каждой технической характеристики. Расценки:

Процессор 'i5'5000
Процессор 'i7'10000
Дисплей 13 дюймов5000
Дисплей 15 дюймов10000
Оперативная память 8 Гб3000
Оперативная память 16 Гб7000

Выходит, нам нужно проверять значения свойств в объекте компьютера и, в зависимости от результата, прибавлять к базовой цене ту или иную сумму. В итоге мы получим цену устройства. Для проверки каждой характеристики отдельно можно использовать конструкцию else if. Тогда код будет выглядеть примерно так:

let price = computer.basicPrice;

if (computer.processor === 'i5') {
  price += 5000;
} else if (computer.processor === 'i7') {
  price += 10000;
}

// И так далее суммируем стоимость остальных компонентов

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

В некоторых ситуациях блоки с условиями можно сократить с помощью объектов. Давайте разбираться, как это сделать. Рассмотрим на примере.

let printFavoriteFood = function (name) {
  let message = 'Моя любимая еда — ';

  if (name === 'Кекс') {
    message += 'рыба';
  } else if (name === 'Рудольф') {
    message += 'котлета';
  } else if (name === 'Снежок') {
    message += 'сметана';
  }

  return message;
};

console.log(printFavoriteFood('Снежок')); // Выведет: Моя любимая еда — сметана

Обратите внимание, что каждому коту, а точнее его имени, соответствует определённая еда. При этом порядок котов совсем неважен. Можно ли записать вкусовые предпочтения котов в объект? Давайте попробуем.

let catsFavoriteFood = {
  Кекс: 'рыба',
  Рудольф: 'котлета',
  Снежок: 'сметана'
};

Можно ли теперь использовать данные в объекте catsFavoriteFood так, чтобы совсем избавиться от условий в теле функции printFavoriteFood? Можно! Перед нами обычный объект со свойствами и их значениями. Значит, мы можем обратиться к свойству объекта и подставить в выражение строку, которая в нём содержится.

let catsFavoriteFood = {
  Кекс: 'рыба',
  Рудольф: 'котлета',
  Снежок: 'сметана'
};

let printFavoriteFood = function (name) {
  return 'Моя любимая еда — ' + catsFavoriteFood[name];
};

console.log(printFavoriteFood('Снежок')); // Выведет: Моя любимая еда — сметана

Код работает, как и прежде, зато насколько сократилась наша программа!

Мы записали в объект не характеристику вида name: 'Кекс', а соотношение имени кота и лакомства, которое по вкусу именно ему. Такие объекты называют словарями, мапами или ассоциативными массивами. Они очень удобны в использовании и позволяют писать код чище и проще.

В нашей программе для каждого показателя подходит своя цена, например, для процессора 'i7' это 10000, для дисплея 13 дюймов это 5000. Значит, мы можем сделать словари, которые будут хранить стоимость каждой характеристики, а затем обращаться к свойствам этих объектов, чтобы получить цену.

Минимальный вид табов
  • index.html
HTML
HTML

Вы перешли на другую страницу

Кликните внутри мини-браузера, чтобы поставить фокус в это окно.

100%
Бабушка Кекс

Притормози, дружище

Проходить вызовы части «Объекты» тренажёра «Базовые структуры данных» можно после регистрации и оформления подписки.