المسارات
/
JavaScript
JavaScript
/
التمارين
/
تعويذات إليس التحليلية
تعويذات إليس التحليلية

تعويذات إليس التحليلية

تمرين تعلّمي

مقدمة

الدوال السهمية

إلى جانب تعريفات الدوال وتعبيرات الدوال، تمتلك JavaScript أيضًا صياغة أخرى موجزة جدًا لتعريف الدالة. وتُسمّى هذه الدوال الدوال السهمية.

إليك مقارنة بين تعريف الدالة والدالة السهمية.

function addUpTwoNumbers(num1, num2) {
  return num1 + num2;
}
// function keyword removed and => added
const addUpTwoNumbers = (num1, num2) => {
  return num1 + num2;
};

إذا كان جسم الدالة يحتوي على عبارة return فقط، كما في المثال أعلاه، فيمكن حذف الأقواس المعقوفة {} والكلمة المفتاحية return. وإذا كان هناك معامل واحد فقط، فيمكن حذف الأقواس الهلالية () أيضًا.

const addUpTwoNumbers = (num1, num2) => num1 + num2;
const square = num => num * num;

غالبًا ما تُستخدم الدوال السهمية لتعريف دوال استدعاء راجع قصيرة مباشرة داخل استدعاء الدالة.

applyToSquare(number => number * number);

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

تمتلك المصفوفات طرقًا مدمجة لتحليل محتوى المصفوفة. تأخذ معظم هذه الطرق دالة تُرجع صحيحًا أو خطأ كوسيط. وتُسمّى هذه الدالة predicate.

الغرض من هذه الطرق المدمجة هو استخدامها بدلًا من حلقة for أو الطريقة المدمجة forEach:

مثال على التحليل باستخدام حلقة for:

const numbers = [1, 'two', 3, 'four'];
for (var i = 0; i < numbers.length; i++) {
  if (numbers[i] === 'two') {
    return i;
  }
}
// => 1

مثال على التحليل باستخدام طريقة مدمجة:

const numbers = [1, 'two', 3, 'four'];
numbers.indexOf('two');
// => 1

فيما يلي بعض الطرق المدمجة المفيدة الأخرى المتاحة لتحليل مصفوفة. راجع MDN للحصول على قائمة كاملة بطرق المصفوفات.

includes

تحدد طريقة includes(value) ما إذا كانت المصفوفة تتضمن قيمة معيّنة. وتُرجع true عندما تكون القيمة متضمّنة، وfalse خلاف ذلك.

const numbers = [1, 'two', 3, 'four'];
numbers.includes(1);
// => true
numbers.includes('one');
// => false

every

تأخذ طريقة every(predicate) دالة تكون دالة شرطية. وهي تختبر ما إذا كانت كل العناصر في المصفوفة تُرجع true عند تمريرها إلى الدالة الشرطية. بعبارة أخرى: تتحقق الطريقة من أن كل عناصرها تجتاز الاختبار المُمرَّر إلى استدعاء الدالة. وتُرجع true عندما تجتاز كل العناصر اختبار الدالة الشرطية، وfalse خلاف ذلك.

const numbers = [1, 3, 5, 7, 9];
numbers.every((num) => num % 2 !== 0);
// => true

some

طريقة some(predicate) هي نفسها طريقة every، لكنها تُرجع true إذا اجتاز عنصر واحد على الأقل في المصفوفة اختبار الدالة الشرطية.

const numbers = [1, 3, 5, 7, 9];
numbers.some((num) => num % 2 !== 0);
// => true

find

تُرجع طريقة find(predicate) قيمة أول عنصر في المصفوفة يجتاز اختبار predicate. فحيث تُرجع some() قيمة true عند الاجتياز، تُرجع find() القيمة الفعلية في المصفوفة. وتُرجع الطريقة undefined عندما لا يجتاز أي من عناصر المصفوفة اختبار الدالة الشرطية.

const numbers = [1, 3, 5, 7, 9];
numbers.find((num) => num < 5);
// => 1

findIndex

طريقة findIndex(predicate) هي نفسها طريقة find()، لكنها تُرجع الفهرس (الأول) للعنصر الذي يجتاز اختبار الدالة الشرطية بدلًا من value. وتُرجع الطريقة -1 عندما لا يجتاز أي من عناصر المصفوفة اختبار الدالة الشرطية.

const numbers = [1, 3, 5, 7, 9];
numbers.findIndex((num) => num > 7);
// => 4
numbers.findIndex((num) => num > 9);
// => -1

التعليمات

إليز، الساحرة الناشئة، تواصل تدريبها. ستُعطى عدة أكوام من البطاقات تحتاج إليها لأداء حِيَلها. ولتسهيل الأمور قليلًا، تستخدم البطاقات من 1 إلى 10 فقط.

في هذا التمرين، استخدم الطرق المدمجة لتحليل محتويات مصفوفة.

1. إيجاد موضع بطاقة

تريد إليز معرفة موضع بطاقة في الكومة (فهرسها).

const card = 2;
getCardPosition([9, 7, 3, 2], card);
// => 3

2. تحديد ما إذا كانت بطاقة موجودة

تريد إليز تحديد ما إذا كانت بطاقة موجودة في الكومة، بعبارة أخرى، ما إذا كانت الكومة تحتوي على number محدد.

const card = 3;
doesStackIncludeCard([2, 3, 4, 5], card);
// => true

3. تحديد ما إذا كانت كل بطاقة زوجية

تريد إليز معرفة ما إذا كانت كل بطاقة زوجية، بعبارة أخرى، ما إذا كان كل number في الكومة عددًا زوجيًا.

isEachCardEven([2, 4, 6, 7]);
// => false

4. التحقق مما إذا كانت الكومة تحتوي على بطاقة بقيمة فردية

تريد إليز معرفة ما إذا كان في الكومة عدد فردي.

doesStackIncludeOddCard([3, 2, 6, 4, 8]);
// => true

5. الحصول على أول بطاقة فردية من الكومة

تريد إليز معرفة قيمة أول بطاقة فردية.

getFirstOddCard([4, 2, 8, 7, 9]);
// => 7

6. تحديد موضع أول بطاقة زوجية

تريد إليز معرفة موضع أول بطاقة زوجية.

getFirstEvenCardPosition([5, 2, 3, 1]);
// => 1
تعديل عبر GitHub يفتح الرابط في نافذة أو علامة تبويب جديدة
JavaScript Exercism

مستعد لبدء تعويذات إليس التحليلية؟

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