اشیاء Set مجموعهای از مقادیر منحصربهفرد (Unique values) هستند. شما میتوانید عناصر داخل یک Set را بر اساس ترتیب ورودشان (Insertion order) پیمایش کنید. یک مقدار در یک Set فقط و فقط یکبار میتواند حضور داشته باشد؛ یعنی وجود مقادیر تکراری در آن امکانپذیر نیست.
کد زیر برخی از عملیاتهای پایه با یک Set را نشان میدهد:
const mySet = new Set();
mySet.add(1);
mySet.add("some text");
mySet.add("foo");
mySet.has(1); // true
mySet.delete("foo");
mySet.size; // 2
for (const item of mySet) {
console.log(item);
}
// خروجی:
// 1
// "some text"
شما میتوانید با استفاده از متد Array.from یا نحوِ پخش کردن (Spread syntax)، یک Array از روی یک Set بسازید. در مسیر برگشت نیز، تابع سازندهی Set یک Array را به عنوان ورودی میپذیرد تا آن را به ست تبدیل کند.
نکتهی مهم: از آنجا که اشیاء
Setفقط مقادیر منحصربهفرد را ذخیره میکنند، هنگام تبدیل یک Array به Set، تمام عناصر تکراری موجود در آن آرایه به طور خودکار حذف میشوند!
Array.from(mySet);
[...mySet2];
mySet2 = new Set([1, 2, 3, 4]);
به طور سنتی در جاوااسکریپت، در بسیاری از موقعیتها مجموعهای از عناصر درون آرایهها ذخیره میشدند. با این حال، شیء Set مزایایی دارد که عبارتند از:
حذف کردن عناصر یک Array بر اساس مقدار (با دستور ((arr.splice(arr.indexOf(val), 1) بسیار کند و سنگین است.
اشیاء Set به شما اجازه میدهند عناصر را مستقیماً بر اساس «مقدار» آنها حذف کنید. در حالی که در یک آرایه، مجبورید ابتدا ایندکس عنصر را پیدا کرده و سپس عمل splice را انجام دهید.
مقدار NaN را نمیتوان با متد indexOf در یک آرایه پیدا کرد.
اشیاء Set مقادیر را به صورت منحصربهفرد ذخیره میکنند و نیازی نیست شما به صورت دستی نگران مدیریت و ردیابی مقادیر تکراری باشید.
اشیاء WeakSet مجموعهای از مقادیر قابل پاکسازی از حافظه (Garbage-collectable values) هستند که شامل اشیاء (Objects) و سمبولهای ثبتنشده (Non-registered symbols) میشوند. یک مقدار در WeakSet نیز فقط یکبار میتواند تکرار شود و در کل مجموعه منحصربهفرد است.
تفاوتهای اصلی WeakSet با شیء Set معمولی عبارتند از:
برخلاف Setها، اشیاء WeakSet فقط مجموعهای از Objects یا Symbols هستند و نمیتوانند حاوی مقادیر دلخواه از هر نوع دادهای (مثل اعداد یا رشتهها) باشند.
ارجاعها در این مجموعه از نوع ضعیف (Weak) هستند؛ ارجاع به اشیاء درون مجموعه به صورت ضعیف نگه داشته میشود. اگر هیچ ارجاع دیگری به یک شیءِ ذخیره شده در WeakSet وجود نداشته باشد، آن شیء میتواند توسط سیستم مدیریت حافظه (Garbage collection) پاک شود. این موضوع همچنین به این معنی است که هیچ لیستی از اشیاء فعلیِ موجود در این مجموعه وجود ندارد.
اشیاء WeakSet قابلیت شمارش و پیمایش (Enumerable) ندارند (نمیتوان روی آنها حلقه زد).
موارد کاربرد (Use cases) اشیاء WeakSet محدود است. از آنجا که آنها باعث نشت حافظه (Memory leak) نمیشوند، به عنوان مثال میتوانید با خیال راحت از عناصر DOM به عنوان کلید استفاده کنید و آنها را برای اهداف ردیابی (Tracking) علامتگذاری نمایید.
این محتوا کاملا رایگان توسط تیم کدلپر ترجمه شده و در اختیار شما کاربران عزیز قرار گرفته است، هر گونه کپی برداری برای مقاصد غیر رایگان و بدون ذکر منبع، مورد پیگیری قانونی قرار میگیرد.
ترجمه شده از منبع: https://developer.mozilla.org/en-US/docs/Web/JavaScript