وقتی با آرایهها کار میکنید، گاهی میخواهید برای هر مقدار در آرایه کدی را اجرا کنید. به این کار پیمایش یا حلقه زدن روی آرایه میگویند.
اینجا حالتی را بررسی میکنیم که نمیخواهید آرایه را در این میان تغییر دهید. برای تبدیل آرایهها، بهجای آن مفهوم تبدیل آرایه را ببینید.
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 در این حالت وجود ندارند.
الیس که یک شعبدهباز تازهکار است، باید دست کارتهایش را به روشهای مختلفی بررسی کند. برای اینکه کار ساده بماند، او فقط از کارتهایی با مقدار ۱ تا ۱۰ استفاده میکند.
الیس میخواهد بداند چند کارت از یک نوع خاص در دستش دارد.
تابعی به اسم cardTypeCheck بنویسید که دو پارامتر میگیرد: یک آرایه از کارتها (دست الیز) و نوع کارتی که باید شمرده شود.
تابع باید از forEach استفاده کند و تعداد کارتهای آن نوع مشخص را در دست برگرداند.
const cardType = 3;
cardTypeCheck([1, 2, 3, 4], cardType);
// => 1
برای یک ترفند دیگر، الیس باید بداند چند کارت فرد یا زوج در دستش وجود دارد.
تابعی به اسم determineOddEvenCards پیادهسازی کنید که دو پارامتر میگیرد: یک آرایه از کارتها (دست الیز) و یک «مقدار منطقی» (true معادلِ «زوج» و false معادلِ «فرد» است).
این تابع باید یک عدد برگرداند: تعداد کارتهای فرد یا زوج (بسته به مقدار پارامتر دوم) در دست.
برای تمرین، این بار در پیادهسازی تابع از یک حلقهی for...of استفاده کنید.
determineOddEvenCards([1, 2, 3, 1, 5, 6], true);
// => 2
determineOddEvenCards([1, 2, 3, 1, 5, 6], false);
// => 4
در Exercism ثبتنام کنید تا JavaScript را همراه با 37 مفهوم159 تمرین و مربیگری انسانی واقعی یاد بگیرید و در آن استاد شوید، همهی اینها رایگان.