یکی از سوالات رایج در مصاحبههای استخدامی تفاوت بین متد ()find و ()filter در جاوااسکریپت است. در این مقاله قصد داریم تا این متدها را با هم بررسی کنیم و با نحوه و زمان استفاده از آنها آشنا شویم.
متد ()filter تمام المنتهایی از آرایه که شرایط مشخص شده در تابع callback را داشته باشد، برمیگرداند. در ادامه با یک مثال نحوه کارکرد این متد را بررسی خواهیم کرد:
const x = [1, 2, 3, 4, 5]; const y = x.filter(el => el*2 === 2); console.log("y is: ", y); // y is: [1]
اگر خروجی مثال بالا را بررسی کنیم مقدار y آرایهای متشکل از ۱ المنت میباشد که شرط تعیین شده را برآورده میکند. این به این دلیل است که متد ()filter روی تمام المنتهای آرایه تکرار میشود و درنهایت یک آرایه فیلتر شده که شرایط مشخص شده را داشته باشد return میکند.
متد ()find اولین المنت از آرایه که شرایط مشخص شده در تابع callback را داشته باشد، برمیگرداند. در ادامه آن را با یک مثال بررسی میکنیم:
const x = [1, 2, 3, 4, 5]; const y = x.find(el => el*2 === 2); console.log("y is: ", y); // y is: 1
اکنون اگر خروجی مثال بالا را ببینیم مقدار y برابر با ۱ است. دلیل این اتفاق این است که متد ()find اولین المنتی را در آرایه جستجو میکند که شرایط تعیین شده را داشته باشد.
تفاوت اصلی بین مثالهای بالا عبارتند از:
اگر موردی داریم که انتظار میرود خروجی نهایی بیش از یک المنت باشد و قصد داریم تا عملیات مورد نظر خود را روی همه المنتهای موجود انجام دهیم، میتوانیم از متد ()filter استفاده کنیم. اما اگر غیر این باشد یعنی خروجی نهایی تنها یک المنت از آرایه میباشد، در این صورت میتوانیم متد ()find را مورد استفاده قرار دهیم و از تکرارهای اضافی اجتناب کنیم.
در ادامه نمونههایی از هر دو مورد را بررسی میکنیم:
const x = [1, 2, 3, 4, 5]; const y = x.filter(el => el%2 === 0); console.log("y is: ", y); // y is: [2, 4]
در مثال بالا استفاده از متد ()filter منطقیتر است زیرا میخواهیم شرط مورد نظر خود را روی تمام المنتهای آرایه تکرار کنیم تا عناصری که بر ۲ بخشپذیر هستند را پیدا کنیم.
const emp = [ { name: "Ram", empID: 101 }, { name: "Sham", empID: 102 }, { name: "Mohan", empID: 103 } ]; const res = emp.find(el => el.empID === 102); console.log("res is: ", res); // res is: {name: 'Sham', empID: 102}
در مثال بالا استفاده از متد ()find منطقیتر میباشد زیرا فقط یک کارمند وجود دارد که empID آن برابر با مقدار ۱۰۲ باشد، بنابراین متد ()find به جلوگیری از تکرار عمل جستجو روی آبجکتهای دیگر در آرایه موجود کمک میکند.
در طول توسعه برنامه ممکن است با چالشهایی مواجه شویم که برای برطرف کردن آنها لازم است تا آیتمهای تکی و یا چندگانه منطبق با یک شرط به خصوصی را از یک آرایه استخراج کنیم. این کار را با روشهای مختلفی میتوانیم انجام دهیم که یکی از آنها استفاده از متد ()find و ()filter در جاوااسکریپت است. در این مقاله این دو متد را باهم بررسی کردیم و با تفاوت بین آنها آشنا شدیم.