توسعه دهنده جاواسکریپت
انواع حلقه روی لیست در جاواسکریپت
تو زبان جاواسکریپت برای اینکه بتونیم روی یک لیست جاواسکریپت iterate کنیم و به همه آرایه های اون لیست دسترسی داشته باشیم، چندین متد وجود داره . بریم انواع حلقه روی لیست در جاواسکریپت رو با مثال های ساده بررسی کنیم. از متدهای کلاسیک و معروف شروع کنیم (for & while ) و بعد با forEach map , reducer , filter, every, some, for...of بیشتر آشنا شیم.
while
خوب انتظار داریم که در خروجی مقادیر ۱ و ۲ و ۳ و ۴ و ۵ و ۶ رو داشته باشیم. حلقه از جنس while تا زمانی که شرط ورودی ( در مقابل while نوشته شده) مقدار true داشته باشه، اجرا میشه و با رسیدن به اولین مقدار false ، حلقه شکسته میشه و کدهای بعد از بلاک while اجرا میشه. در صورتی که شرط حلقه همیشه true باشه، این حلقه برای همیشه اجرا میشه و در واقع یک حلقه بینهایت ساختیم. (تو کدهامون همیشه از این حالت اجتناب میکنیم)
for
خوب حلقه for هم با یک دستور ساده بر روی لیست اجرا میشه! همون طور که نگران بینهایت شدن حلقه while هستیم، برای حلقه for هم طوری شرط میذاریم که همیشه حلقه به پایان برسه.
forEach
خوب این متد با دوتا متد قبلی فرق میکنه. این متد بر روی یک لیست اعمال میشه ( پس نگران بینهایت شدنش نیستیم). این متد در ورودی یک تابع میگیره و اون تابع رو روی تک تک اعضای اون لیست به کار میبره!
نکته مهم اینه که این متد ، یک لیست جدید نمیسازه و تغییرات رو روی همون لیستی که داشتیم اعمال میکنه.
for...of
متد بعدی که تو جاواسکریپت وجود داره for...in هست. این متد برای پیشمایش آبجکت به کار میره ولی میشه ازش برای لیست هم استفاده کرد. توصیه میشه که از این متد برای لیست استفاده نکنید چون ممکنه با ترتیب دلخواه یک لیست رو پیمایش کنه و نتیجه اون چیزی که شما میخواهید نباشه. در عوض ES6 یک متد جدید به اسم for...of معرفی کرد که برای لیست کاربرد داره:
map
این متد مثل متد قبلی ، یک تابع رو به عنوان ورودی میگیره و اون رو روی تک تک اعضای اون لیست اعمال میکنه. این متد بر خلاف forEach یک لیست جدید میسازه و کاری به لیست قبلی نداره!
reduce
فرقی که reduce با سایر متد ها داره اینه که نه لیست ورودی رو تغییر میده و نه لیست جدید میسازه، بلکه همه لیست ورودی رو تبدیل به یک شی میکنه (در مثال بالا همه اعداد رو باهم جمع میکنه و به صورت مجموع یک عدد نشون میده)
filter
این متد هم یک تابع به عنوان ورودی میگیره و یک لیست به عنوان خروجی برمیگردونه. هر آیتمی از لیست ورودی که بتونه شرط تابع رو true کنه، توی لیست خروجی قرار میگیره.
لیست خروجی کد بالا، عدد های زوج لیست ورودی هستند.
every
خوب بر خلاف متد های قبلی که خروجی لیست و ...داشتند، این متد خروجی شرطی true یا false داره. در واقع این متد یک شرط رو با تک تک آرایه های اون لیست چک میکنه و در صورتی که همه آرایه ها اون شرط رو داشته باشند ( در مثال بالا ، همه آرایه های لیست، از عدد ۷ کوچکتر هستند) در انتها مقدار true رو برمی گردونه و در غیر این صورت مقدار false رو برمیگردونه.
some
این متد هم مثل every عمل میکنه البته با این تفاوت که مقدار خروجی every در صورتی true میشه که اون شرط برای تک تک اعضای لیست صادق باشه ولی توی some فقط کافیه یکی از آرایه های لیست، اون شرط رو داشته باشن. در این صورت مقدار some برابر با true میشه.
و در آخر یه توصیه به دوستانی که تازه کار هستند
برای اینکه با متدهای بالا بیشتر آشناشین و احساس راحتی داشته باشین، پیشنهاد میکنم خودتون دست به کار شید و شروع کنید به کد زدن. مثال های بالا، مثال های خوبی هستند که میتونید ازشون استفاده کنید . یکی از دلایلی هم که خروجی کدهای بالا رو توی متن قرار ندادم همین موضوع هست. اگر هم نمیخواهید کد بزنید، بهتره که کدهارو ذهنی حل کنید و به جواب برسید. هرچند که آلوده کردن دست ها به کیبرد، بهترین تمرین برای یک برنامه نویس محسوب میشه!
سایر مقاله های من در ویرگول:
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
مطلبی دیگر از این انتشارات
Sass
مطلبی دیگر از این انتشارات
مقایسه NodeJS و PHP ، نبرد برتری و بقا !
مطلبی دیگر از این انتشارات
توضیح ساده prototype در جاوا اسکریپت