تفاوت map و forEach

تفاوت‌های کلیدی بین map و forEach در جاوااسکریپت

در دنیای جاوااسکریپت، دو متد پرکاربرد برای پردازش آرایه‌ها وجود دارد: map و forEach. اگرچه هر دو برای پیمایش آرایه‌ها استفاده می‌شوند، اما تفاوت‌های اساسی در رفتار و کاربرد دارند که درک آن‌ها برای توسعه‌دهندگان حیاتی است.


متد forEach: پیمایش ساده آرایه

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

  • تغییر آرایه اصلی (در صورت نیاز)
  • انجام عملیات جانبی مانند لاگ کردن یا ذخیره داده
  • عدم نیاز به بازگشت مقدار
ویژگی مقدار
مقدار بازگشتی undefined
تغییر آرایه اصلی بله (در صورت دستکاری)

متد map: تبدیل آرایه به آرایه جدید

متد map برخلاف forEach، یک آرایه جدید برمی‌گرداند که حاصل اعمال تابع callback بر هر عنصر آرایه اصلی است. این ویژگی آن را برای تبدیل داده‌ها ایده‌آل می‌کند.

  1. ایجاد آرایه جدید بدون تغییر آرایه اصلی
  2. تبدیل داده‌ها به فرمت مورد نیاز
  3. قابل زنجیره‌سازی (chaining) با سایر متدها
متد map همیشه باید یک مقدار بازگشتی داشته باشد، در غیر این صورت آرایه جدید حاوی مقادیر undefined خواهد بود.

مقایسه عملی با مثال‌های کد

برای درک بهتر تفاوت‌ها، به این مثال‌ها توجه کنید:

متد مثال نتیجه
forEach arr.forEach(x => x * 2) undefined
map arr.map(x => x * 2) آرایه جدید با مقادیر دوبرابر

برای مطالعه عمیق‌تر درباره متدهای تکرار آرایه در جاوااسکریپت، می‌توانید اینجا را کلیک نمایید.

چه زمانی از هر کدام استفاده کنیم؟

انتخاب بین map و forEach به نیاز شما بستگی دارد:

  • از forEach استفاده کنید وقتی فقط نیاز به پیمایش آرایه دارید و نیازی به آرایه جدید ندارید
  • از map استفاده کنید وقتی می‌خواهید داده‌ها را تبدیل کنید و یک آرایه جدید دریافت نمایید
  • map برای زنجیره‌سازی متدها مناسب‌تر است (مثل filter بعد از map)

به یاد داشته باشید که map از نظر عملکردی کمی کندتر از forEach است، زیرا نیاز به ایجاد و بازگرداندن آرایه جدید دارد. اما در بیشتر موارد، این تفاوت ناچیز است و نباید ملاک انتخاب باشد.