مسیرها
/
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. موقعیت یک کارت را پیدا کنید

الیس می‌خواهد موقعیت (ایندکس) یک کارت در دسته را بداند.

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 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.