انواع حلقه روی لیست در جاواسکریپت

تو زبان جاواسکریپت برای اینکه بتونیم روی یک لیست جاواسکریپت iterate کنیم و به همه آرایه های اون لیست دسترسی داشته باشیم، چندین متد وجود داره . بریم انواع حلقه روی لیست در جاواسکریپت رو با مثال های ساده بررسی کنیم. از متدهای کلاسیک و معروف شروع کنیم (for & while ) و بعد با forEach map , reducer , filter, every, some, for...of بیشتر آشنا شیم.

انواع حلقه روی لیست در جاواسکریپت
انواع حلقه روی لیست در جاواسکریپت

while

استفاده از while بر روی یک لیست
استفاده از while بر روی یک لیست

خوب انتظار داریم که در خروجی مقادیر ۱ و ۲ و ۳ و ۴ و ۵ و ۶ رو داشته باشیم. حلقه از جنس while تا زمانی که شرط ورودی ( در مقابل while نوشته شده) مقدار true داشته باشه، اجرا میشه و با رسیدن به اولین مقدار false ، حلقه شکسته میشه و کدهای بعد از بلاک while اجرا می‌شه. در صورتی که شرط حلقه همیشه true باشه، این حلقه برای همیشه اجرا میشه و در واقع یک حلقه بی‌نهایت ساختیم. (تو کدهامون همیشه از این حالت اجتناب می‌کنیم)

for

استفاده از for بر روی یک لیست
استفاده از for بر روی یک لیست

خوب حلقه for هم با یک دستور ساده بر روی لیست اجرا می‌شه! همون طور که نگران بینهایت شدن حلقه while هستیم، برای حلقه for هم طوری شرط میذاریم که همیشه حلقه به پایان برسه.

forEach

استفاده از forEach بر روی یک لیست
استفاده از forEach بر روی یک لیست

خوب این متد با دوتا متد قبلی فرق میکنه. این متد بر روی یک لیست اعمال می‌شه ( پس نگران بی‌نهایت شدنش نیستیم). این متد در ورودی یک تابع می‌گیره و اون تابع رو روی تک تک اعضای اون لیست به کار میبره!

نکته مهم اینه که این متد ، یک لیست جدید نمی‌سازه و تغییرات رو روی همون لیستی که داشتیم اعمال میکنه.

for...of

متد بعدی که تو جاواسکریپت وجود داره for...in هست. این متد برای پیشمایش آبجکت به کار میره ولی میشه ازش برای لیست هم استفاده کرد. توصیه میشه که از این متد برای لیست استفاده نکنید چون ممکنه با ترتیب دلخواه یک لیست رو پیمایش کنه و نتیجه اون چیزی که شما می‌خواهید نباشه. در عوض ES6 یک متد جدید به اسم for...of معرفی کرد که برای لیست کاربرد داره:

استفاده از for of بر روی یک لیست
استفاده از for of بر روی یک لیست


map

استفاده از map بر روی یک لیست
استفاده از map بر روی یک لیست

این متد مثل متد قبلی ، یک تابع رو به عنوان ورودی میگیره و اون رو روی تک تک اعضای اون لیست اعمال میکنه. این متد بر خلاف forEach یک لیست جدید می‌سازه و کاری به لیست قبلی نداره!

reduce

استفاده از reduce بر روی یک لیست
استفاده از reduce بر روی یک لیست

فرقی که reduce با سایر متد ها داره اینه که نه لیست ورودی رو تغییر میده و نه لیست جدید می‌سازه، بلکه همه لیست ورودی رو تبدیل به یک شی می‌کنه (‌در مثال بالا همه اعداد رو باهم جمع میکنه و به صورت مجموع یک عدد نشون میده)

filter

استفاده از filter بر روی یک لیست
استفاده از filter بر روی یک لیست

این متد هم یک تابع به عنوان ورودی می‌گیره و یک لیست به عنوان خروجی برمی‌گردونه. هر آیتمی از لیست ورودی که بتونه شرط تابع رو true کنه، توی لیست خروجی قرار می‌گیره.

لیست خروجی کد بالا، عدد های زوج لیست ورودی هستند.

every

استفاده از every بر روی یک لیست
استفاده از every بر روی یک لیست

خوب بر خلاف متد های قبلی که خروجی لیست و ...داشتند، این متد خروجی شرطی true یا false داره. در واقع این متد یک شرط رو با تک تک آرایه های اون لیست چک می‌کنه و در صورتی که همه آرایه ها اون شرط رو داشته باشند ( در مثال بالا ، همه آرایه های لیست، از عدد ۷ کوچکتر هستند) در انتها مقدار true رو برمی گردونه و در غیر این صورت مقدار false  رو برمی‌گردونه.

some

استفاده از some بر روی یک لیست
استفاده از some بر روی یک لیست

این متد هم مثل every عمل میکنه البته با این تفاوت که مقدار خروجی every در صورتی true میشه که اون شرط برای تک تک اعضای لیست صادق باشه ولی توی some فقط کافیه یکی از آرایه های لیست، اون شرط رو داشته باشن. در این صورت مقدار some برابر با true می‌شه.



و در آخر یه توصیه به دوستانی که تازه کار هستند

برای اینکه با متدهای بالا بیشتر آشناشین و احساس راحتی داشته باشین، پیشنهاد می‌کنم خودتون دست به کار شید و شروع کنید به کد زدن. مثال های بالا، مثال های خوبی هستند که می‌‌تونید ازشون استفاده کنید . یکی از دلایلی هم که خروجی کدهای بالا رو توی متن قرار ندادم همین موضوع هست. اگر هم نمی‌خواهید کد بزنید، بهتره که کدهارو ذهنی حل کنید و به جواب برسید. هرچند که آلوده کردن دست ها به کیبرد، بهترین تمرین برای یک برنامه نویس محسوب می‌شه!



سایر مقاله های من در ویرگول:

https://virgool.io/JavaScript8/آبجکت-بدون-اثر-جانبی-در-جاواسکریپت-wswtjtwpguuq
https://virgool.io/@novonimo/استراتژی-مناسب-گیت-kf6noyelifff
https://virgool.io/iran-react-community/%D9%81%D8%A7%D9%86%DA%A9%D8%B4%D9%86%D8%A7%D9%84-%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA-%D8%AF%D8%B1-%D9%85%D9%82%D8%A7%D8%A8%D9%84-%DA%A9%D9%84%D8%A7%D8%B3-%DA%A9%D8%A7%D9%85%D9%BE%D9%88%D9%86%D9%86%D8%AA-b8bhzvut2zp1



Contact With me:
https://t.me/nimamohamadian
https://www.facebook.com/nimamohamadian89
https://twitter.com/Nima_Mohamadian
https://www.linkedin.com/in/nima-mohamadian-57ba63123