Menu
Coddy logo textTech

JSON anidado

Parte de la sección Lógica y Flujo del Journey de JavaScript de Coddy — lección 23 de 65.

Un objeto JSON puede contener otro objeto JSON en su interior. Puede estar anidado infinitamente. Por ejemplo:

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

Para acceder a una clave anidada escribiríamos:

userData.user.name
userData.user.address.location
// Y así sucesivamente
challenge icon

Desafío

Fácil

Crea una función llamada calculateRestaurantBill que reciba como entrada un objeto JSON que represente el pedido de un restaurante. Cada clave en el objeto es el nombre de un plato, y cada valor es otro objeto que contiene:

  • price (número)
  • quantity (número)
  • isSpecialOffer (booleano) 

si es true, hay un descuento del 20% en ese plato. La función debe:

  1. Calcular la cuenta total
  2. Aplicar cualquier descuento por oferta especial

El objeto devuelto contiene:

  • totalBeforeDiscount
  • totalDiscount
  • finalTotal

(Todos los valores se redondean a 2 decimales)

Hoja de referencia

Los objetos JSON pueden anidarse infinitamente:

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

Accede a las propiedades anidadas utilizando la notación de puntos:

userData.user.name
userData.user.address.location
// Y así sucesivamente

Pruébalo tú mismo

function calculateRestaurantBill(order) {
    // Escribe el código aquí
    
    
    return {
        totalBeforeDiscount: Number(totalBeforeDiscount.toFixed(2)),
        totalDiscount: Number(totalDiscount.toFixed(2)),
        finalTotal: Number(finalTotal.toFixed(2))
    };
}
// No escribas nada fuera de la función
quiz iconPonte a prueba

Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.

Todas las lecciones de Lógica y Flujo