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

تو زبان جاواسکریپت برای اینکه بتونیم روی یک لیست جاواسکریپت iterate کنیم و به همه آرایه های اون لیست دسترسی داشته باشیم، چندین متد وجود داره . بریم انواع حلقه روی لیست در جاواسکریپت رو با مثال های ساده بررسی کنیم. از متدهای کلاسیک و معروف شروع کنیم (for & while ) و بعد با forEach map , reducer , filter, every, some, for...of بیشتر آشنا شیم.انواع حلقه روی لیست در جاواسکریپتwhileاستفاده از while بر روی یک لیستخوب انتظار داریم که در خروجی مقادیر ۱ و ۲ و ۳ و ۴ و ۵ و ۶ رو داشته باشیم. حلقه از جنس while تا زمانی که شرط ورودی ( در مقابل while نوشته شده) مقدار true داشته باشه، اجرا میشه و با رسیدن به اولین مقدار false ، حلقه شکسته میشه و کدهای بعد از بلاک while اجرا می‌شه. در صورتی که شرط حلقه همیشه true باشه، این حلقه برای همیشه اجرا میشه و در واقع یک حلقه بی‌نهایت ساختیم. (تو کدهامون همیشه از این حالت اجتناب می‌کنیم)forاستفاده از for بر روی یک لیستخوب حلقه for هم با یک دستور ساده بر روی لیست اجرا می‌شه! همون طور که نگران بینهایت شدن حلقه while هستیم، برای حلقه for هم طوری شرط میذاریم که همیشه حلقه به پایان برسه.forEachاستفاده از forEach بر روی یک لیستخوب این متد با دوتا متد قبلی فرق میکنه. این متد بر روی یک لیست اعمال می‌شه ( پس نگران بی‌نهایت شدنش نیستیم). این متد در ورودی یک تابع می‌گیره و اون تابع رو روی تک تک اعضای اون لیست به کار میبره! نکته مهم اینه که این متد ، یک لیست جدید نمی‌سازه و تغییرات رو روی همون لیستی که داشتیم اعمال میکنه. for...ofمتد بعدی که تو جاواسکریپت وجود داره for...in هست. این متد برای پیشمایش آبجکت به کار میره ولی میشه ازش برای لیست هم استفاده کرد. توصیه میشه که از این متد برای لیست استفاده نکنید چون ممکنه با ترتیب دلخواه یک لیست رو پیمایش کنه و نتیجه اون چیزی که شما می‌خواهید نباشه. در عوض ES6 یک متد جدید به اسم for...of معرفی کرد که برای لیست کاربرد داره:استفاده از for of بر روی یک لیستmapاستفاده از map بر روی یک لیستاین متد مثل متد قبلی ، یک تابع رو به عنوان ورودی میگیره و اون رو روی تک تک اعضای اون لیست اعمال میکنه. این متد بر خلاف forEach یک لیست جدید می‌سازه و کاری به لیست قبلی نداره!reduceاستفاده از reduce بر روی یک لیستفرقی که reduce با سایر متد ها داره اینه که نه لیست ورودی رو تغییر میده و نه لیست جدید می‌سازه، بلکه همه لیست ورودی رو تبدیل به یک شی می‌کنه (‌در مثال بالا همه اعداد رو باهم جمع میکنه و به صورت مجموع یک عدد نشون میده)filterاستفاده از filter بر روی یک لیستاین متد هم یک تابع به عنوان ورودی می‌گیره و یک لیست به عنوان خروجی برمی‌گردونه. هر آیتمی از لیست ورودی که بتونه شرط تابع رو true کنه، توی لیست خروجی قرار می‌گیره. لیست خروجی کد بالا، عدد های زوج لیست ورودی هستند.everyاستفاده از every بر روی یک لیستخوب بر خلاف متد های قبلی که خروجی لیست و ...داشتند، این متد خروجی شرطی true یا false داره. در واقع این متد یک شرط رو با تک تک آرایه های اون لیست چک می‌کنه و در صورتی که همه آرایه ها اون شرط رو داشته باشند ( در مثال بالا ، همه آرایه های لیست، از عدد ۷ کوچکتر هستند) در انتها مقدار true رو برمی گردونه و در غیر این صورت مقدار false رو برمی‌گردونه.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/nimamohamadianhttps://www.facebook.com/nimamohamadian89https://twitter.com/Nima_Mohamadianhttps://www.linkedin.com/in/nima-mohamadian-57ba63123