المسارات
/
JavaScript
JavaScript
/
التمارين
/
تعويذات إليس المفكَّكة
تعويذات إليس المفكَّكة

تعويذات إليس المفكَّكة

تمرين تعلّمي

مقدمة

تفكيك المصفوفات

صيغة تفكيك المصفوفات في JavaScript طريقة موجزة لاستخراج القيم من مصفوفة وإسنادها إلى متغيرات منفصلة.

في هذا المثال، تُسند كل قيمة في مصفوفة numberOfMoons إلى الكوكب المقابل لها:

const numberOfMoons = [0, 2, 14];
const [venus, mars, neptune] = numberOfMoons;

neptune;
// => 14

باختصار:

  • تتيح الصيغة تسمية العناصر ذات الموضع في المصفوفة، وكذلك تبديل المتغيرات عبر إعادة الإسناد.
  • صيغة التفكيك متاحة داخل معاملات الدالة، وهي متاحة على أي كيان قابل للتكرار.
  • ترك موضع دون تسمية (بعدم كتابة أي اسم متغير) يتجاهل ذلك الموضع بصمت.

تفكيك الكائنات

توجد في JavaScript أيضًا صيغة تفكيك لاستخراج الخصائص من كائن وإسنادها إلى متغيرات منفصلة.

في هذا المثال، تُستخرج رموز الطقس من الكائن weather:

const weather = {
  sun: '☀️',
  sun_behind_small_cloud: '🌤️',
  sun_behind_cloud: '⛅',
  sun_behind_large_cloud: '🌥️',
  sun_behind_rain_cloud: '🌦️',
  cloud: '☁️',
  cloud_with_rain: '🌧️',
  cloud_with_snow: '🌨️',
  cloud_with_lightning: '🌩️',
  cloud_with_lightning_and_rain: '⛈️',
};

const { sun, cloud, cloud_with_lightning: thunder } = weather;

sun;
// => '☀️'

cloud;
// => '☁️'

thunder;
// => '🌩️'

باختصار:

  • تتيح الصيغة استخراج الخصائص، وكذلك استخراجها وإعادة تسميتها.
  • صيغة التفكيك متاحة داخل معاملات الدالة.

التعليمات

إيليز، الساحرة الناشئة، تواصل تدريبها. لديها مجموعة من البطاقات تريد التلاعب بها.

لتبسيط الأمور، تبدأ عادةً بالبطاقات المرقّمة من 2 إلى 10 فقط، على الرغم من أن بعض الحِيَل قد تتضمن بطاقات إضافية (بطاقات الوجه).

Note

هناك أساليب عديدة لخلط البطاقات، ولكن للحفاظ على وهم السحر، من الضروري ألّا يُستخدم أسلوب واحد بعينه، فمثلًا لا تستخدم إيليز splice أو slice أو shift أو unshift أو push أو at. كما لا يُستخدم أبدًا مُوصِل المصفوفة array[index] ولا مُوصِل الكائن (object[key] وobject.key).

هل تريد مساعدة إيليز على الارتقاء بسحرها؟

Advanced

يمكن تنفيذ كل دالة باستخدام المعاملات وجسم دالة يحوي return expression واحدًا.

1. احصل على البطاقة الأولى

ستستدعي إيليز البطاقة الأولى في المجموعة دون استخدام array[index] أو .at(index) أو .shift(). إنه يشبه السحر تمامًا.

const deck = [5, 9, 7, 1, 8];

getFirstCard(deck);
// => 5

2. احصل على البطاقة الثانية

تقوم إيليز بخفة يد فتستدعي البطاقة الثانية في المجموعة دون استخدام array[index] أو .shift().

const deck = [3, 2, 10, 6, 7];

getSecondCard(deck);
// => 2

3. بدّل بطاقتين

ستجعل إيليز البطاقتين في المجموعة تتبادلان مكانيهما. إنها لا تحتاج إلى استدعاء أي دالة.

const deck = [10, 7];

swapTwoCards(deck);
// => [7, 10]

4. أزِح ثلاث بطاقات

لأداء مزيد من خفة اليد، تأخذ إيليز ثلاث بطاقات وتنقل البطاقة العليا بسرعة إلى الخلف، فتصبح البطاقة الوسطى هي الأولى، والبطاقة السفلية القديمة هي الوسطى. إنها لا تحتاج إلى استدعاء أي دالة.

const deck = [2, 6, 10];

shiftThreeCardsAround(deck);
// => [6, 10, 2]

5. اختر الرزمة المسمّاة

ستفصل إيليز المجموعة إلى رزمتين. ثم تطلب من المراقب أن يختار إحدى الرزمتين، وسنسمّيها chosen. لم تعد رزمة disregarded ذات صلة، فتجعلها تختفي. إنها لا تحتاج إلى استدعاء أي دالة.

const deck = [5, 4, 7, 10];
const chosen = [5, 4];
const disregarded = [7, 10];

pickNamedPile({ chosen, disregarded });
// => [5, 4]

5. بدّل الرزمة المختارة

للأسف، يظل المراقب يختار الرزمة "الخاطئة"، لكن بسحر سريع بارع، تعيد إيليز تسمية رزمة chosen لتصبح disregarded، ورزمة disregarded لتصبح رزمة chosen. إنها لا تحتاج إلى استدعاء أي دالة.

const deck = [5, 4, 7, 10];
const chosen = [5, 4];
const disregarded = [7, 10];

swapNamedPile({ chosen, disregarded });
// => { chosen: [7, 10], disregarded: [5, 4] }
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
JavaScript Exercism

مستعد لبدء تعويذات إليس المفكَّكة؟

سجّل في Exercism لتتعلّم وتتقن JavaScript عبر 37 مفهومًا159 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.