صيغة تفكيك المصفوفات في 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 فقط، على الرغم من أن بعض الحِيَل قد تتضمن بطاقات إضافية (بطاقات الوجه).
هناك أساليب عديدة لخلط البطاقات، ولكن للحفاظ على وهم السحر، من الضروري ألّا يُستخدم أسلوب واحد بعينه، فمثلًا لا تستخدم إيليز splice أو slice أو shift أو unshift أو push أو at.
كما لا يُستخدم أبدًا مُوصِل المصفوفة array[index] ولا مُوصِل الكائن (object[key] وobject.key).
هل تريد مساعدة إيليز على الارتقاء بسحرها؟
يمكن تنفيذ كل دالة باستخدام المعاملات وجسم دالة يحوي return expression واحدًا.
ستستدعي إيليز البطاقة الأولى في المجموعة دون استخدام array[index] أو .at(index) أو .shift().
إنه يشبه السحر تمامًا.
const deck = [5, 9, 7, 1, 8];
getFirstCard(deck);
// => 5
تقوم إيليز بخفة يد فتستدعي البطاقة الثانية في المجموعة دون استخدام array[index] أو .shift().
const deck = [3, 2, 10, 6, 7];
getSecondCard(deck);
// => 2
ستجعل إيليز البطاقتين في المجموعة تتبادلان مكانيهما. إنها لا تحتاج إلى استدعاء أي دالة.
const deck = [10, 7];
swapTwoCards(deck);
// => [7, 10]
لأداء مزيد من خفة اليد، تأخذ إيليز ثلاث بطاقات وتنقل البطاقة العليا بسرعة إلى الخلف، فتصبح البطاقة الوسطى هي الأولى، والبطاقة السفلية القديمة هي الوسطى. إنها لا تحتاج إلى استدعاء أي دالة.
const deck = [2, 6, 10];
shiftThreeCardsAround(deck);
// => [6, 10, 2]
ستفصل إيليز المجموعة إلى رزمتين.
ثم تطلب من المراقب أن يختار إحدى الرزمتين، وسنسمّيها chosen.
لم تعد رزمة disregarded ذات صلة، فتجعلها تختفي.
إنها لا تحتاج إلى استدعاء أي دالة.
const deck = [5, 4, 7, 10];
const chosen = [5, 4];
const disregarded = [7, 10];
pickNamedPile({ chosen, disregarded });
// => [5, 4]
للأسف، يظل المراقب يختار الرزمة "الخاطئة"، لكن بسحر سريع بارع، تعيد إيليز تسمية رزمة 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] }
سجّل في Exercism لتتعلّم وتتقن JavaScript عبر 37 مفهومًا159 تمرينًا، وإرشاد بشري حقيقي، وكل ذلك مجانًا.