- Теория
- Теория
Объект как словарь
Теперь посчитаем цену компьютера. Она состоит из нескольких слагаемых: стартовой цены и стоимости каждой технической характеристики. Расценки:
Процессор '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
Вы перешли на другую страницу
Кликните внутри мини-браузера, чтобы поставить фокус в это окно.