Menu
Coddy logo textTech

Вложенный JSON

Часть раздела Логика и поток путешествия по JavaScript на Coddy — урок 23 из 65.

JSON-объект может содержать внутри себя другой JSON-объект. Он может иметь неограниченную вложенность. Например:

const userData = {
  "user": {
    "name": "Kim",
    "address": {
      "city": "Springfield",
      "zip": 12345,
      "location": {
        "coordinates": {
          "latitude": 42.1234,
          "longitude": -71.5678
        }
      }
    }
  }
}

Для доступа к вложенному ключу мы бы написали:

userData.user.name
userData.user.address.location
// И так далее
challenge icon

Задание

Легко

Создайте функцию с именем calculateRestaurantBill, которая принимает в качестве входных данных объект JSON, представляющий заказ в ресторане. Каждый ключ в объекте — это название блюда, а каждое значение — другой объект, содержащий:

  • price (число)
  • quantity (число)
  • isSpecialOffer (логическое значение) 

если true, на это блюдо предоставляется скидка 20%. Функция должна:

  1. Рассчитать общую сумму счета
  2. Применить все скидки по специальным предложениям

Возвращаемый объект содержит:

  • totalBeforeDiscount
  • totalDiscount
  • finalTotal

(Все значения округляются до 2 знаков после запятой)

Шпаргалка

JSON-объекты могут иметь неограниченную глубину вложенности:

const userData = {
  "user": {
    "name": "Kim",
    "address": {
      "city": "Springfield",
      "zip": 12345,
      "location": {
        "coordinates": {
          "latitude": 42.1234,
          "longitude": -71.5678
        }
      }
    }
  }
}

Доступ к вложенным свойствам осуществляется с помощью точечной нотации:

userData.user.name
userData.user.address.location
// И так далее

Попробуйте сами

function calculateRestaurantBill(order) {
    // Напишите код здесь
    
    
    return {
        totalBeforeDiscount: Number(totalBeforeDiscount.toFixed(2)),
        totalDiscount: Number(totalDiscount.toFixed(2)),
        finalTotal: Number(finalTotal.toFixed(2))
    };
}
// Не пишите ничего вне функции
quiz iconПроверьте себя

В этом уроке есть небольшой тест. Начните урок, чтобы ответить на вопросы и сохранить прогресс.

Все уроки раздела Логика и поток