متد کاربردی 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 are’nt yours

پکیج این متد در NPM

میتونین برای استفاده از این پکیج و متد در محیط Node از لینک زیر به مخزن رسمی اش در گیتهاب استفاده کنین: Object.Select Official repository

خوشحال میشم ایده هاتون رو در مورد این متد توی کامنت ها ببینم تا فیبدک هامون رو به هم منتقل کنیم. اگر از خوندن این مطلب لذت بردین میتونین اونو با دیگران به اشتراک بزارید. همینطور میتونین از سایر مطالب بلاگ هم استفاده کنین و یا اگر دوس داشته باشید، کنارمون بنویسید. برای راهنمای انتشار مطلب در پول ریکوئست میتونین از این لینک استفاده کنین.