خرائط التجزئة في جافا سكريبت: الكائنات مقابل كائن الخريطة
لا تحتوي جافا سكريبت على ما يعادل “خريطة التجزئة” مباشرةً كما هو الحال في بعض اللغات الأخرى. ومع ذلك، يمكننا تحقيق وظائف مماثلة باستخدام طريقتين أساسيتين: كائنات جافا سكريبت العادية وكائن Map
المدمج. تتناول هذه المقالة كلاً منهما، مع مقارنة نقاط القوة والضعف لمساعدتك في اختيار النهج الأنسب لاحتياجاتك.
جدول المحتويات
استخدام الكائنات كخرائط تجزئة
يمكن أن تعمل كائنات جافا سكريبت كخرائط تجزئة بسيطة. فهي تستخدم مفاتيح نصية للوصول إلى القيم المرتبطة. هذا النهج بسيط ولكنه له قيود.
مثال:
const myHashMap = {}; // إنشاء كائن فارغ
// إدخال أزواج المفتاح والقيمة
myHashMap.apple = 1;
myHashMap.banana = 2;
myHashMap.cherry = 3;
// الوصول إلى القيم
console.log(myHashMap.banana); // الإخراج: 2
// التحقق من وجود مفتاح
console.log('apple' in myHashMap); // الإخراج: true
// حذف زوج مفتاح-قيمة
delete myHashMap.banana;
// التكرار عبر أزواج المفتاح والقيمة (ملاحظة: الترتيب غير مضمون)
for (const key in myHashMap) {
console.log(key, myHashMap[key]);
}
المزايا:
- بسيط ومألوف لمطوري جافا سكريبت.
- لا توجد تبعيات خارجية.
العيوب:
- تقتصر المفاتيح على النصوص (أو القيم التي يتم تحويلها ضمنيًا إلى نصوص).
- لا توجد خاصية حجم مدمجة؛ تحتاج إلى تتبع الحجم يدويًا.
- يفتقر إلى الطرق المدمجة مثل
get
وset
وhas
وما إلى ذلك. - ترتيب المفاتيح غير مضمون.
استخدام كائن Map
يوفر كائن Map
(الذي تم تقديمه في ES6) حلاً أكثر قوة. يدعم أي نوع بيانات كمفتاح، ويتجنب مشكلات إكراه النوع، ويوفر طرقًا مدمجة للتلاعب بكفاءة.
مثال:
const myMap = new Map();
// إدخال أزواج المفتاح والقيمة
myMap.set("apple", 1);
myMap.set(123, "number"); // رقم كمفتاح
myMap.set({ a: 1 }, "object"); // كائن كمفتاح
// الوصول إلى القيم
console.log(myMap.get("apple")); // الإخراج: 1
console.log(myMap.get(123)); // الإخراج: "number"
// التحقق من وجود مفتاح
console.log(myMap.has("apple")); // الإخراج: true
// حذف زوج مفتاح-قيمة
myMap.delete("apple");
// الحصول على الحجم
console.log(myMap.size); // الإخراج: 2
// التكرار عبر أزواج المفتاح والقيمة (يتم الحفاظ على الترتيب)
for (const [key, value] of myMap) {
console.log(key, value);
}
المزايا:
- يدعم أي نوع بيانات كمفتاح.
- يوفر طرقًا مدمجة (
set
وget
وhas
وdelete
وsize
). - تكرار فعال باستخدام حلقات
for...of
. - يحافظ على ترتيب الإدخال.
العيوب:
- يتطلب توافق ES6 (على الرغم من توفر برامج التعبئة).
الخلاصة
في حين أن كائنات جافا سكريبت العادية قد تكفي لسلوك يشبه خريطة التجزئة البسيطة، يُنصح عمومًا باستخدام كائن Map
لميزاته وكفاءته العالية. ما لم تكن مقيدًا بشدة بتوافق المتصفح، فإن Map
هو الخيار المفضل لمعظم مشاريع جافا سكريبت الحديثة.