تعداد بازدید: 270

Map Standard Build-in Object

در جاوا اسکریپت همه چیز شئ‌ است . هر زمان که لازم باشد یک امکان جدید در اختیار شما شما قرار بدهد یک شئ استاندارد برای آن تعریف خواهد کرد. Map یک شئ‌ استاندارد جاوا اسکریپت است که به صورت کلید مقدار (همانند Object) اطلاعات را نگهداری می کند .

برای تعریف یک Map به یکی از دو روش زیر اقدام می کنیم:

let m1 = new Map([
  [0,'papillon'],
  [2,'free wild beest'],
  [3,'PELICAN'],
])
let m = new Map

m.set(1,'papillon')
m.set(2,'free wild beest')
m.set(3,'PELICAN')
/*Map(3) { 1 → "papillon", 2 → "free wild beest", 3 → "PELICAN" }*/

ویژگی های شاخص Map از قرار زیر است:

  • قابل پیمایش است
  • کلید ها در آن یکتا است. در صورت تکرار کلید در این نوع داده خطایی دریافت نخواهیم کرد و تنها مقدار بروز می شود.
  • از پروتکل پیمایش یعنی Iterator Protocol پیروی می کند.
  • با استفاده از for…of statement قابل پیمایش است (همچنین متد هایی برای پیمایش دارد)
  • همچنین هم کلید و هم مقدار قابلیت استفاده از نوع داده های پیشرفته را دارند
  • با همان ترتیبی که داده در آن وارد می شود با همان ترتیب در پیمایش قرار می گیرد.
  • در زمان پیمایش item به صورت [key , value] بر می گردد.

شاخصه اصلی این نوع داده این است که بسیار نزدیک به Object است با این تفاوت که کلید در آن یکسان است و کلید ها قابلیت تعریف تکراری ندارند و همچنین کلید ها در آن می توانند از نوع داده های پیشرفته استفاده کنند.

let m = new Map

let keyString = 'a string'
let keyObject = {}
let keyFunction = function(){}

m.set(keyString,'value with string')
m.set(keyObject,'value with object key')
m.set(keyFunction,'value with function key')

console.log(m.size,m)

console.log(m.get(keyString))
console.log(m.get(keyObject))
console.log(m.get(keyFunction))

console.log(m.get('a string'))
console.log(m.get({})) //undefined, beacuse of keyObject !== {}
console.log(m.get(function (){})) //undefined beacuse of keyFunction !== function (){}

یکی از شاخصه های اصلی Map یکتایی در کلید آن است . این یکتایی معادل عبارت === می باشد. تنها استثنا برای این مورد NaN است . همان طور که می دانید در جاوا اسکریپت اشیا قابل مقایسه نیستند . پس می توان گفت که در مثال بالا مقادیر keyFunction !== function(){} و همچنین این مورد در رابطه با keyObject نیز صدق می کند.

Map Vs. Object

نوع داده Map برگرفته از نوع داده Object است و پیش از آن دقیقا از Object برای اهداف مشابه استفاده می کردیم . به صورت کلی می توان گفت که اشیا برای تبادل اطلاعات میان سرویس ها (به طور مثال Client , Server) است و Map در جریان برنامه استفاده می شود (این قابلیت که کلید ها از نوع داده های پیشرفته استفاده می کنند بسیار کاربردی است )

Object Map
تداخل کلید ها (Accidental Kyes) در اشیا یک سری کلید پیش فرض داریم مثل prototype در Map در زمان تعریف هیچ گونه کلید موجود نیست
جنس کلید ها (Key Type) نوع کلید در اشیا باید String یا Symbol باشند در Map کلید این قابلیت را دارد که از هر نوع داده ای باشد.
ترتیب کلید ها (Key Order) در اشیا اگر چه در ابتدا با ترتیب ورود اعضا قابل پیمایش است اما اعتمادی به این موضوع نیست چرا که این ترتیب قابل تغییر است ترتیب در پیمایش دقیقا مطابق ورود اعضا است .
قابلیت پیمایش (Iterating Protocol) اشیا از پروتکل پیمایش پیروی نمی کنند اگر چه با for…of قابل پیمایش هستند.متد یا ویژگی مستقیم برای برگرداندن اعضا ندارد. کاملا از پروتکل پیمایش استفاده می کنند و می توان با for…of یا متد های اختصاصی آن ها پیمایش را روی آن ها انجام داد. همچنین ویژگی size می توان تعداد اعضا را برگرداند.
Performance عملیات های اصلی رو اعضای موجود در اشیا (اضافه کردن حذف کردن ) به صورت متوالی syntax مناسبی ندارد و سخت تر است . Map متد های خوبی برای عملیات های اصلی روی اعضا دارد (set,has,get,delete)
serialization در اشیا ما چون تبادل داده میان سرور و کلاینت را داریم می توانیم از JSON.stringify , JSON.parse استفاده کنید. متد مستقیمی برای این موضوع نداریم ولی می توان serialize اختصاصی برای آن ساخت. به این همین دلیل این نوع داده برای تبادل میان سرویس ها مناسب نیست.

Map Property

size برای تعیین تعداد اعضا

Map Instance Method

Map.prototype.clear برای پاک کردن لیست اعضا
Map.prototype.delete(key) پاک کردن بر اساس کلید
Map.prototype.get(key) دریافت مقدار بر اساس کلید
Map.prototype.has(key) بررسی وجود یا عدم وجود یک کلید در collection
Map.prototype.keys() دریافت لیست کلید ها در قالب یک موجودیت قابل پیمایش
Map.prototype.value() دریافت لیست مقادیر در قالب یک موجودیت قابل پیمایش
Map.prototype.entries() دریافت لیست اعضا به صورت کلید مقدار در قالب یک موجودیت قابل پیمایش
Map.prototype.forEach(callback) امکان دریافت یک callback برای پیمایش لیست کلید ها و مقادیر اعضا

Map Iteration

برای پیمایش یک نوع داده از Map می توان از for…in statement استفاده کرد. همچنین از متد های keys,values,entries,forEach هم می توان به صورت ترکیبی با سایر statement ها انجام داد.مثال زیر را در console اجرا کنید تا نتیجه هر یک از statement ها را تعیین کنید.

let m = new Map

m.set(1,'papillon')
m.set(2,'free wild beest')
m.set(3,'PELICAN')
console.log('_____________________________________')
for(let item of m){
  console.log(item)
}
console.log('______________keys___________________')

for(let key of m.keys()){
  console.log(key)
}
console.log('______________values__________________')
for(let value of m.values()){
  console.log(value)
}
console.log('_____________entries__________________')
for(let entry of m.entries()){
  console.log(entry)
}
console.log('______entries with destructuring_______')
for(let [key , value] of m.entries()){
  console.log(key,value)
}
console.log('______________forEach__________________')
m.forEach((item,index) => {
  console.log(item,index)
})

رابطه Map با آرایه ها

با استفاده از متد ایستا Array.from و همچنین Rest Operator می توان یک Map را به یک آرایه تبدیل کرد.

let arr = [
  [0,'papillon'],
  [1,'free wild beest'],
  [2,'pelikan'],
]

console.log('map constructor args---------------------')
let m = new Map(arr)
console.log(m.entries())

console.log('create array from map --------------------')
console.log(Array.from(m))
console.log([...m])
console.log(Array.from(m.keys()))
console.log(Array.from(m.values()))

Merge Maps

با استفاده از Rest Operator می توان دو یا بیشتر از Map را با هم ترکیب کرد.

let m1 = new Map([
  [0,'papillon'],
  [2,'free wild beest'],
  [3,'PELICAN'],
])

let m2 = new Map([
  [4,'success'],
  [5,'calm'],
  [6,'technique'],
])

let merged = new Map([...m1,...m2])
console.log(merged.entries())

 

مطالب مشابه

Proxy Standard Build-in Object

Proxy یک شئ پیش فرض در جاوا اسکریپت است که بر اساس Proxy Design Pattern در جاوا اسکریپت تعریف شده است و قابلیت رهگیری...

Generator در جاوا اسکرپیت

ld-in object) که معمولا در بدنه آن ها یک مولد با چرخه بی نهایت وجود دارد و هر زمان که نیاز باشد با یک ارجاع پردازش این...

webpack javascript module bundler

Webpack Module Bundler Part 4

وب پک یک ابزار توسعه بخش Front End می باشد . یکی از مشکلاتی که در توسعه بخش Front End با آن مواجه هستیم کش کردن Assets...

اشتراک گذاری :

مدیر وب سایت گنوتک . برنامه نویسی رو با زبان C در هفده سالگی شروع کردم . در حال حاضر به برنامه نویسی php برپایه معماری MVC , HMVC و همچنین سیستم مدیریت محتوای WordPress و فریم ورک محبوب لاراول علاقه مند هستم و دوست دارم اطلاعاتم رو با شما به اشتراک بگذارم.

۰ دیدگاه برای Map Standard Build-in Object

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *