منتشر شده در

نقشه‌های هش در جاوا اسکریپت: جفت‌های کلید-مقدار با کارایی بالا

نویسندگان

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

خب، همه ما می‌دانیم که زبان‌های برنامه‌نویسی دیگری چیزی به نام Hashtable دارند. این یک ساختار داده است که جفت‌های کلید-مقدار را ذخیره می‌کند و به دلیل جستجوی زمان ثابت O(1) بسیار عالی است. این یک ساختار داده مفید است که می‌توانیم از آن برای ذخیره داده‌ها استفاده کنیم. در جاوا اسکریپت، ساختار داده‌ای داخلی مانند Hashtable نداریم. اما می‌توانیم از یک شی برای ذخیره جفت‌های کلید-مقدار استفاده کنیم. این در جاوا اسکریپت به عنوان Map شناخته می‌شود.

Map چیست؟

Map مجموعه ای از عناصر است که هر عنصر به عنوان جفت کلید-مقدار ذخیره می‌شود. کلیدها و مقادیر یک Map می‌توانند هر نوعی باشند (هم اشیاء و هم مقادیر اولیه). یک شی Map عناصر خود را به ترتیب درج تکرار می‌کند - یک حلقه for...of در هر تکرار یک آرایه [key, value] برمی‌گرداند.

یک Map جفت‌های کلید-مقدار را نگه می‌دارد که کلیدها می‌توانند از هر نوع داده‌ای باشند. یک Map خاصیتی دارد که اندازه Map را نشان می‌دهد. یک Map ترتیب درج اصلی کلیدها را به خاطر می‌سپارد.

روش‌ها و خاصیت‌های Map

روشتوضیحات
new Map()ایجاد یک شی Map جدید
set()تنظیم مقدار برای یک کلید در Map
get()بازگرداندن مقدار برای یک کلید
has()بازگرداندن یک مقدار boolean که نشان می‌دهد یک کلید در Map وجود دارد یا خیر
delete()حذف یک کلید از Map
clear()حذف همه کلیدها از Map
values()بازگرداندن یک شی تکرارگر از مقادیر موجود در Map
keys()بازگرداندن یک شی تکرارگر از کلیدهای موجود در Map
entries()بازگرداندن یک شی تکرارگر از جفت‌های کلید-مقدار موجود در Map
forEach()اجرای یک تابع ارائه شده برای هر جفت کلید-مقدار در Map
خاصیتتوضیحات
sizeبازگرداندن تعداد جفت‌های کلید-مقدار در Map

مثال Map

const map = new Map()
map.set('name', 'John')
map.set('age', 30)
map.set('isMarried', true)
map.set('address', { city: 'New York', state: 'NY' })
map.set('hobbies', ['reading', 'writing', 'coding'])

console.log(map.get('name')) // John
console.log(map.get('age')) // 30
console.log(map.get('isMarried')) // true
console.log(map.get('address')) // {city: 'New York', state: 'NY'}
console.log(map.get('hobbies')) // ['reading', 'writing', 'coding']

console.log(map.size) // 5

تکرار Map

const map = new Map()
map.set('name', 'John')
map.set('age', 30)
map.set('isMarried', true)
map.set('address', { city: 'New York', state: 'NY' })
map.set('hobbies', ['reading', 'writing', 'coding'])

// تکرار کلیدها
for (const key of map.keys()) {
  console.log(key)
}

// تکرار مقادیر
for (const value of map.values()) {
  console.log(value)
}

// تکرار جفت‌های کلید-مقدار
for (const [key, value] of map.entries()) {
  console.log(key, value)
}

// تکرار جفت‌های کلید-مقدار
map.forEach((value, key) => {
  console.log(key, value)
})

مقایسه Map و Object

MapObject
Map مجموعه ای از آیتم‌های داده کلید دار است، درست مانند Object. اما تفاوت اصلی این است که Map به کلیدهای از هر نوعی اجازه می‌دهد.کلیدهای Object باید یا رشته یا سمبل باشند.
Map قابل تکرار است و به راحتی می‌توان روی آن حلقه زد.Object قابل تکرار نیست و به راحتی نمی‌توان روی آن حلقه زد.
Map دارای یک روش forEach داخلی است، بنابراین نیازی به تبدیل آن به آرایه نیست.Object روش forEach داخلی ندارد.
Map دارای یک خاصیت size است، بنابراین به راحتی می‌توان تعداد آیتم‌ها را بدست آورد.Object خاصیت size ندارد.
Map می‌تواند از اشیاء به عنوان کلید استفاده کند.Object نمی‌تواند از اشیاء به عنوان کلید استفاده کند.
Map در حالت کلی از Object سریع‌تر است.Object در حالت کلی کندتر از Map است.

نتیجه‌گیری

در این مقاله، ما در مورد Map در جاوا اسکریپت یاد گرفتیم. ما در مورد روش‌ها و خواص Map یاد گرفتیم. ما همچنین در مورد تفاوت بین Map و Object شناختیم. امیدوارم از این مقاله لذت برده باشید. اگر سؤالی دارید، لطفاً نظر خود را در زیر بنویسید. با تشکر از شما برای خواندن.

در اصل منتشر شده در: https://blog.imam.dev/blog/javascript-hashmap

منابع

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map

https://www.freecodecamp.org/news/what-is-a-javascript-map-what-are-the-differences-between-map-and-object-in-javascript/

https://www.geeksforgeeks.org/map-vs-object-javascript/