مسیرها
/
JavaScript
JavaScript
/
تمرین‌ها
/
افسون‌های حلقه‌ای الیز
افسون‌های حلقه‌ای الیز

افسون‌های حلقه‌ای الیز

تمرین یادگیری

مقدمه

وقتی با آرایه‌ها کار می‌کنید، گاهی می‌خواهید برای هر مقدار در آرایه کدی را اجرا کنید. به این کار پیمایش یا حلقه زدن روی آرایه می‌گویند.

اینجا حالتی را بررسی می‌کنیم که نمی‌خواهید آرایه را در این میان تغییر دهید. برای تبدیل آرایه‌ها، به‌جای آن مفهوم تبدیل آرایه را ببینید.

حلقه‌ی for

ابتدایی‌ترین راه برای پیمایش یک آرایه، استفاده از حلقه‌ی for است؛ مفهوم حلقه‌ی For را ببینید.

const numbers = [6.0221515, 10, 23];

for (let i = 0; i < numbers.length; i++) {
  console.log(numbers[i]);
}
// => 6.0221515
// => 10
// => 23

حلقه‌ی for...of

وقتی می‌خواهید در هر تکرار مستقیماً با خود مقدار کار کنید و اصلاً به اندیس نیازی ندارید، می‌توانید از حلقه‌ی for...of استفاده کنید.

حلقه‌ی for...of مثل همان حلقه‌ی for ساده‌ای که بالا دیدیم کار می‌کند، با این تفاوت که به‌جای اینکه مجبور باشید در حلقه با اندیس به‌عنوان یک متغیر سروکار داشته باشید، مقدار مستقیماً در اختیارتان قرار می‌گیرد.

const numbers = [6.0221515, 10, 23];

// Because re-assigning number inside the loop will be very
// confusing, disallowing that via const is preferable.
for (const number of numbers) {
  console.log(number);
}
// => 6.0221515
// => 10
// => 23

درست مثل حلقه‌های for معمولی، می‌توانید از continue استفاده کنید تا تکرار جاری را متوقف کنید و از break تا اجرای کل حلقه را متوقف کنید.

متد forEach

هر آرایه متدی به نام forEach دارد که می‌توان با آن روی عنصرهای آرایه حلقه زد.

forEach یک «callback» را به‌عنوان پارامتر می‌پذیرد. تابع callback برای هر عنصر آرایه یک بار فراخوانی می‌شود. عنصر جاری، اندیس آن و کل آرایه به‌عنوان آرگومان به callback داده می‌شوند. اغلب فقط از عنصر جاری یا اندیس استفاده می‌شود.

const numbers = [6.0221515, 10, 23];

numbers.forEach((number, index) => console.log(number, index));
// => 6.0221515 0
// => 10 1
// => 23 2

وقتی حلقه‌ی forEach شروع شد، دیگر راهی برای متوقف کردن تکرار وجود ندارد. دستورهای break و continue در این حالت وجود ندارند.

دستورالعمل‌ها

الیس که یک شعبده‌باز تازه‌کار است، باید دست کارت‌هایش را به روش‌های مختلفی بررسی کند. برای اینکه کار ساده بماند، او فقط از کارت‌هایی با مقدار ۱ تا ۱۰ استفاده می‌کند.

1. تعیین کنید چند کارت از یک نوع خاص در دست وجود دارد

الیس می‌خواهد بداند چند کارت از یک نوع خاص در دستش دارد.

تابعی به اسم cardTypeCheck بنویسید که دو پارامتر می‌گیرد: یک آرایه از کارت‌ها (دست الیز) و نوع کارتی که باید شمرده شود.

Note

تابع باید از forEach استفاده کند و تعداد کارت‌های آن نوع مشخص را در دست برگرداند.

const cardType = 3;
cardTypeCheck([1, 2, 3, 4], cardType);
// => 1

2. تعیین کنید چند کارت فرد یا زوج وجود دارد

برای یک ترفند دیگر، الیس باید بداند چند کارت فرد یا زوج در دستش وجود دارد.

تابعی به اسم determineOddEvenCards پیاده‌سازی کنید که دو پارامتر می‌گیرد: یک آرایه از کارت‌ها (دست الیز) و یک «مقدار منطقی» (true معادلِ «زوج» و false معادلِ «فرد» است).

این تابع باید یک عدد برگرداند: تعداد کارت‌های فرد یا زوج (بسته به مقدار پارامتر دوم) در دست.

Note

برای تمرین، این بار در پیاده‌سازی تابع از یک حلقه‌ی for...of استفاده کنید.

determineOddEvenCards([1, 2, 3, 1, 5, 6], true);
// => 2

determineOddEvenCards([1, 2, 3, 1, 5, 6], false);
// => 4
ویرایش از طریق GitHub این لینک در پنجره یا زبانه‌ی جدیدی باز می‌شود
JavaScript Exercism

آماده‌اید افسون‌های حلقه‌ای الیز را شروع کنید؟

در Exercism ثبت‌نام کنید تا JavaScript را همراه با 37 مفهوم159 تمرین و مربی‌گری انسانی واقعی یاد بگیرید و در آن استاد شوید، همه‌ی این‌ها رایگان.