Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

JSON المتداخل

جزء من قسم Logic & Flow في رحلة 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

(يتم تقريب جميع القيم إلى منزلتين عشريتين)

ورقة مرجعية

يمكن أن تكون كائنات JSON متداخلة إلى ما لا نهاية:

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

الوصول إلى الخصائص المتداخلة باستخدام تدوين النقطة (dot notation):

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اختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow