مجموعه های کلیددار

می توانید از Object literals برای ذخیره جفت های کلید-مقدار و Arrays برای ذخیره مجموعه های تکرارپذیر از مقادیر استفاده کنید. ES6 همچنین ساختارهای داده تخصصی را برای موارد استفاده دقیق‌تر معرفی می‌کند: نقشه برای جفت‌های کلید-مقدار، و تنظیم برای مقادیر فردی.

نقشه

نقشه یک ساختار داده تکرارپذیر است که اطلاعات را به صورت جفت کلید-مقدار، شبیه به یک شیء تحت اللفظی ذخیره می کند. برخلاف Object literals، Map به مقادیر و کلیدها اجازه می دهد تا هر نوع داده ای داشته باشند و عناصر ترتیبی که به Map اضافه می شوند، هنگام تکرار روی آن حفظ می شوند.

برای ایجاد نقشه، از سازنده Map() استفاده کنید:

const myMap = new Map();

myMap;
> Map(0)

می‌توانید با استفاده از نحوی که شبیه یک آرایه (یا هر شی تکرارکننده ) است، یک نقشه را با داده‌ها از قبل پر کنید که شامل اشیاء آرایه‌مانند از دو عنصر است. عنصر اول در هر یک از این ساختارهای داده دو عنصری به کلید تبدیل می شود، در حالی که عنصر دوم به مقدار مرتبط با آن کلید تبدیل می شود. ساده‌ترین شکل آن، عملاً آرایه‌ای است که در آن هر عنصر خود آرایه‌ای است که از دو عنصر تشکیل شده است، کلید و مقدار عنصری که باید به نقشه اضافه شود:

const myMap = new Map([
    [ "myKey", "A string value" ],
    [ "mySecondKey", 500 ],
    [ "myThirdKey", true ]
]);

myMap;
> Map(3) {'myKey' => 'A string value', 'mySecondKey' => 500, 'myThirdKey' => true}

باز هم، یک شی Map با یک شی تحت اللفظی تفاوت دارد زیرا هم مقادیر و هم کلیدها می توانند هر نوع داده و مقداری را بگیرند:

const notAFunction = () => console.log( "function" );
const myMap = new Map([
  [ null, 0 ],
  [ false, "This is false" ],
  [ undefined, "No defined value" ],
  [ NaN, "Not a number" ]
]);

myMap;
> Map(4) {null => 0, false => 'This is false', undefined => 'No defined value', NaN => 'Not a number'}

برای دریافت، تنظیم یا حذف عناصر نقشه، از روش‌های به ارث رسیده از سازنده Map استفاده کنید:

const myMap = new Map();

myMap;
> Map(0)

myMap.set( "myKey", "My value." );

myMap.has( "myKey" );
> true

myMap.get( "myKey" );
"My value."

myMap.delete( "myKey" );

myMap;
> Map(0)

کلیدها در نقشه منحصر به فرد هستند، به این معنی که تنظیم یک کلید یکسان، جفت کلید-مقدار ذخیره شده قبلی را بازنویسی می کند:

const myMap = new Map([ [ "myKey", "A string value" ] ]);

myMap.set( "myKey", 500 );

myMap;
> Map(1) {'myKey' => 500}

همانند اشیاء، می‌توانید یک Map را به متغیری که با const اعلام شده است اختصاص دهید و سپس آن Map را تغییر دهید. با این حال، مانند سایر موارد استفاده از const ، نمی‌توانید خود متغیر را تغییر دهید یا حذف کنید:

const myMap = new Map();
myMap.set( "myKey", "A string value" );

myMap;
> Map(1) {'myKey' => 500}

نقشه ضعیف

WeakMap نقشه ای است که دارای ارجاعات "ضعیف" است، که باید ارجاع به اشیا یا نمادهایی باشد که به ثبت جهانی نمادها اضافه نشده اند.

برای ایجاد WeakMap، از سازنده WeakMap() استفاده کنید:

const myWeakMap = new WeakMap();

myWeakMap;
> WeakMap(0)

نحو WeakMap شبیه به Map است، اما WeakMaps قابل تکرار نیستند و تلاش برای استفاده از هر مقداری غیر از یک شی یا نماد به عنوان یک کلید باعث خطای نحوی می شود. وقتی هیچ ارجاعی به کلیدی خارج از WeakMap وجود نداشته باشد، آن شی یا نماد و مقدار مرتبط در WeakMap، هر دو واجد شرایط جمع‌آوری زباله هستند.

این اجازه می دهد تا موارد استفاده مانند ذخیره ابرداده مرتبط با یک شی در WeakMap، با استفاده از ارجاع به شی به عنوان کلید. اگر هیچ مرجع دیگری برای این شی وجود نداشته باشد، و شی از حافظه حذف شود، ابرداده مرتبط نیز حذف می شود.

تنظیم

یک مجموعه مجموعه ای تکرارپذیر از مقادیر منحصر به فرد است که تا حدودی شبیه به یک آرایه است، اگرچه یک مجموعه فقط می تواند حاوی مقادیر منحصر به فرد باشد. همانند نقشه، تکرار بر روی یک مجموعه، عناصر سفارش اضافه شده به آن را حفظ می کند.

برای ایجاد یک Set، از سازنده Set() استفاده کنید:

const mySet = new Set();

mySet;
> Set []

شما همچنین می توانید یک مجموعه از یک آرایه واقعی ایجاد کنید:

const mySet = new Set([ 1, 2, 3 ]);

mySet;
> Set(3) [ 1, 2, 3 ]

از آنجا که یک مجموعه اجازه عناصر تکراری را نمی‌دهد، وقتی یک مجموعه از آرایه‌ای حاوی چندین نمونه از یک مقدار ایجاد می‌شود، تنها اولین نمونه از آن مقدار را حفظ می‌کند:

const mySet = new Set([ 1, 2, 3, 2 ]);

mySet;
> Set(3) [ 1, 2, 3 ]

برای افزودن یا حذف عناصر از یک مجموعه، از روش های به ارث رسیده از سازنده Set استفاده کنید. این روش ها به جای ارجاع به شاخص، بر روی یک عنصر بر اساس مقدار خود عنصر عمل می کنند:

const mySet = new Set();

mySet.add( "My value." );

mySet;
> Set [ "My value." ]

mySet.has( "My value." );
> true

mySet.delete( "My value." );

mySet;
> Set []

اگرچه مجموعه‌ها مجموعه‌های نمایه‌سازی‌شده نیستند، و قرار نیست از آن‌ها استفاده شود، عناصر در یک مجموعه به ترتیب درج مجدد تکرار می‌شوند . تلاش برای افزودن یک مقدار عنصر تکراری به یک مجموعه نادیده گرفته می شود و ترتیب درج اصلی حفظ می شود:

const mySet = new Set([ 1, 2, 3 ]);

mySet;
> Set(3) [ 1, 2, 3 ]

mySet.add( 2 );
> Set(3) [ 1, 2, 3 ]

برای ایجاد یک آرایه از یک مجموعه، از متد Array.from() یا نحو گسترش استفاده کنید:

const mySet = new Set([ 1, 2, 3 ]);
const myArray = Array.from( mySet );

myArray;
> Array(3) [ 1, 2, 3 ]

[ ...mySet ];
> Array(3) [ 1, 2, 3 ]

WeakSet

WeakSet مجموعه ای است که فقط حاوی مقادیر قابل جمع آوری زباله است، مانند ارجاع به اشیاء، یا نمادهایی که به رجیستری جهانی نمادها اضافه نشده اند.

برای ایجاد WeakSet، از سازنده WeakSet() استفاده کنید:

const myWeakSet = new WeakSet();

myWeakSet;
> WeakSet []

نحو WeakSet مشابه Set است، اگرچه WeakSet قابل تکرار نیست و تلاش برای اضافه کردن هر مقداری غیر از یک شی یا نماد باعث خطای نحوی می شود. مانند WeakMap، وقتی هیچ ارجاع دیگری به یک مقدار ارجاع شده توسط WeakSet وجود نداشته باشد، آن مقدار برای جمع آوری زباله واجد شرایط می شود.

این امکان استفاده از مواردی مانند جمع آوری یک مجموعه واحد و تکرارپذیر از اشیاء مرتبط را فراهم می کند. اگر هیچ مرجع دیگری به یک شی که توسط WeakSet ارجاع داده شده است وجود نداشته باشد، عنصر مرتبط نیز از WeakSet حذف می شود.

درک خود را بررسی کنید

با توجه به موارد زیر:

        const myMap = new Map([ [ "myKey", "My string" ] ]);
        myMap.set( "myKey", 100 );
      

myMap چه چیزی را برمی گرداند؟

100
"My string"
undefined