80- آموزش جاوااسکریپت | آشنایی با Sets در (ES6)
در این آموزش با ساختار داده Set در جاوااسکریپت (ES6) آشنا میشویم؛ ابزاری قدرتمند برای ذخیرهسازی مجموعهای از مقادیر منحصربهفرد (Unique) از هر نوع دادهای، بدون تکرار.
در استاندارد ES6، ساختار داده دیگری به نام Set معرفی شد. Set مجموعهای از مقادیر منحصربهفرد (Unique Values) را در خود ذخیره میکند. این یعنی در یک Set، هیچ مقدار تکراری نمیتواند وجود داشته باشد. شما میتوانید هر نوع دادهای، اعم از مقادیر اولیه (Primitives) یا اشیاء ارجاعی (Reference Types) را در آن ذخیره کنید.
ساخت یک Set
برای ایجاد یک Set جدید، از کلمه کلیدی new و سازنده Set استفاده میکنیم:
const set1 = new Set();
اضافه کردن مقادیر به Set
برای افزودن اعضا به Set از متد add() استفاده میکنیم. در مثال زیر، انواع مختلف دادهها را به مجموعه اضافه میکنیم:
// اضافه کردن انواع دادهها
set1.add(100);
set1.add('A string');
set1.add({ name: 'John' });
set1.add(true);
console.log(set1);
// خروجی شامل عدد، رشته، آبجکت و مقدار بولین است.
ویژگی منحصربهفرد بودن (Uniqueness)
اگر تلاش کنیم مقداری را که قبلاً در Set وجود داشته دوباره اضافه کنیم، جاوااسکریپت آن را نادیده میگیرد:
set1.add(100); // این مقدار از قبل وجود دارد
console.log(set1.size); // خروجی همچنان 4 است و مقدار تکراری اضافه نمیشود.
روش دوم برای تعریف اولیه Set
میتوانید مقادیر اولیه را هنگام ساخت Set به صورت یک آرایه به سازنده آن پاس دهید:
const set2 = new Set([1, true, 'hello']);
console.log(set2);
بررسی تعداد اعضا و وجود یک مقدار
مانند Map، برای شمارش تعداد اعضای Set از ویژگی size استفاده میکنیم:
console.log(set1.size); // 4
برای بررسی اینکه آیا مقدار خاصی در Set وجود دارد یا خیر، از متد has() استفاده میشود:
console.log(set1.has(100)); // true
console.log(set1.has(50 + 50)); // true (حاصل عبارت ارزیابی میشود)
نکته مهم درباره اشیاء ارجاعی (Reference Types)
اگر وجود آبجکتی را که در زمان تعریف اضافه کردهایم بررسی کنیم، مقدار false دریافت میکنیم:
console.log(set1.has({ name: 'John' })); // false
علت چیست؟ آبجکتها در جاوااسکریپت بر اساس آدرس حافظه (Reference) مقایسه میشوند، نه مقدار داخلی آنها. آبجکتی که در متد has نوشته شده، یک شیء جدید در خانهای دیگر از حافظه است.
حذف مقادیر از Set
برای حذف یک عضو مشخص از Set، از متد delete() استفاده میکنیم:
set1.delete(100);
console.log(set1); // مقدار 100 از مجموعه حذف میشود.
پیمایش (Iteration) روی Set
برای چرخیدن روی اعضای یک Set میتوانیم از متدهای مختلفی استفاده کنیم.
۱. حلقه for...of
for (let item of set1) {
console.log(item);
}
نکته: از آنجا که Set کلید ندارد و فقط حاوی مقادیر است، فراخوانی متدهای set1.values() و set1.keys() رفتار و خروجی یکسانی دارند.
۲. متد forEach
set1.forEach((value) => {
console.log(value);
});
تبدیل Set به آرایه (Array)
یکی از کاربردهای رایج Set، حذف مقادیر تکراری از یک آرایه و سپس بازگرداندن آن به فرمت آرایه است. برای تبدیل Set به آرایه از متد Array.from() استفاده میکنیم:
const setArray = Array.from(set1);
console.log(setArray); // تبدیل به یک آرایه استاندارد
جمعبندی
ساختار داده Set جایگزینی عالی برای آرایهها در سناریوهایی است که نیاز به بررسی سریع وجود یک آیتم (با متد has) و جلوگیری از ورود دادههای تکراری داریم. ترکیب Set با متد Array.from یک روش بسیار محبوب برای حذف دادههای تکراری از آرایهها در جاوااسکریپت مدرن است.