مهندس نرم افزار. با کمی فعالیت در pullrequest.ir
متد کاربردی Object.select
همین چند لحظه پیش یکی از دوستانم در توییتر MValipour ایده ای رو باهام درمیون گذاشت مبنی بر اضافه کردن متدی به اسم Object.select
که به نظرم خیلی کاربردی و جالب بود و تصمیم گرفتم تا تنور داغه تبدیلش کنم به یه مطلب توی بلاگ :p
توی نسخه ES۶ عبارت const به جاوااسکریپت اضافه شد. هم چنین پترنهایی برای انتخاب آیتم های مورد نیاز از آبجکت ها هم به جی اس اضافه شد به نام Destructing Pattern. توی این مطلب نمیخام واردش بشم و میتونین جستجوش کنین. خیلی کاربردیه بهتون قول میدم :)
اما چیزی که توی این پترن وجود داره به صورت زیره: فرض کنین یه آبجکت داریم که هویت یه انسان رو نشون میده:
const john = {
name: 'john',
lastName: 'Doe',
age: 25
}
الگوی Destructive توی ES6 بهمون اجازه میده در صورتی که مثلا فقط به اسم و سن این انسان نیاز داریم، فقط همونا رو ازش استخراج کنیم:
const john = {
name: 'john',
lastName: 'Doe',
age: 25
}
const {name, age} = john
// name == 'john', age == 25
ولی این طرز استخراج آیتم های مورد نظر از یه آبجکت، زمانی که تعداد آیتم ها بالا میره و آبجکت بزرگ میشه خیلی خسته کننده و کثیف میشه. خوب میشد اگر متدی مثل Object.select
وجود داشت که بهش آبجکتمون و آیتم هایی که ازش نیاز داریم رو پاس میدادیم و برامون همینکار رو انجام میداد:
const john = {
name: 'john',
lastName: 'Doe',
age: 25
}
Object.select = (obj, ...keys) => {
const result = {}
// If the key is an array, apply on all of it's items
const apply = key => {
key instanceof Array ?
key.forEach(apply) :
result[key] = obj[key]
}
apply(keys)
return result
}
// before:
const {name, age} = john
// after:
Object.select(john, 'name', 'age')
چرا از john.select
استفاده نکنیم؟
ممکنه سوال پیش بیاد چرا این متد رو به Object.prototype
اضافه نکردیم تا راحت تر بتونیم از john.select('name', 'age')
استفاده کنیم.
درسته که در این صورت خیلی راحت تر میشه اما این به نظرم یه آنتی پترنه. یه گفته ی قدیمی هست که میگه:
Don’t mess around with objects that aren't yours
پکیج این متد در NPM
میتونین برای استفاده از این پکیج و متد در محیط Node از لینک زیر به مخزن رسمی اش در گیتهاب استفاده کنین:
Object.Select Official repository
خوشحال میشم ایده هاتون رو در مورد این متد توی کامنت ها ببینم تا فیبدک هامون رو به هم منتقل کنیم.
اگر از خوندن این مطلب لذت بردین میتونین اونو با دیگران به اشتراک بزارید. همینطور میتونین از سایر مطالب بلاگ هم استفاده کنین و یا اگر دوس داشته باشید، کنارمون بنویسید. برای راهنمای انتشار مطلب در پول ریکوئست میتونین با ما درتماس باشید.
مطلبی دیگر از این انتشارات
رفع مشکل نام های طولانی در BEM
مطلبی دیگر از این انتشارات
جدال با پس زمینهی زرد ، یا چطور رنگ پسزمینهٔ زرد کروم برای ورودیهای autocomplete را از بین ببریم
مطلبی دیگر از این انتشارات
وباپلیکیشن