تبدیل اشیا به آرایه و برعکس در جاوا اسکریپت – به زبان ساده
اگر تاکنون با مجموعه دادهها و به طور خاص API-های مبتنی بر وب کار کرده باشید، حتماً تا به حال با «نمادگذاری شیئ جاوا اسکریپت» (JavaScript Object Notation) یا به اختصار JSON سر و کار یافتهاید. این نمادگذاری یک جایگزین سبکتر XML است که در پایگاههای داده مبتنی بر سند مانند MongoDB مورد استفاده قرار میگیرد. در عمل JSON همه جا حضور دارد. در این راهنما با روش تبدیل اشیا به آرایه و برعکس در جاوا اسکریپت آشنا خواهیم شد.
بدین ترتیب متدهای داخلی موجود در کلاس Object جاوا اسکریپت که یک شیء را گرفته و به آرایه تبدیل میکنند و یا برعکس عمل میکنند میشناسیم. پیش از پرداختن به این موضوع به بررسی JSON میپردازیم تا مطمئن شویم که با ساختار آن آشنا هستیم.
مروری بر JSON
دو نوع دادهای که موجب شدهاند JSON چنین انعطافپذیر باشد، شیء و آرایه هستند. این دو، انواع داده پیچیدهای هستند که چندین مقدار را نگهداری میکنند و از این نظر با انواع داده ابتدایی که یک مقدار را ذخیره میسازند متفاوت هستند.
- شیءها مجموعه نامرتبی از جفتهای کلید-مقدار هستند. کلید یک شناسه متنی است که باید درون شیء، یکتا باشد. مقدار میتواند یک نوع داده ابتدایی و یا یک مقدار داده پیچیده باشد.
- آرایهها لیست مرتبی از مقادیر هستند که به شناسه یکتا نیاز ندارند و میتوانند شامل انواع داده مختلفی باشند. موقعیت مقادیر در لیست به نام اندیس خوانده میشود که از صفر آغاز میشود، یعنی آیتم نخست در آرایه دارای اندیس 0 است.
مجموعه دادههای پیچیده میتوانند شامل آرایهای از اشیا یا اشیایی که مقدار آرایه (و یا حتی شیء دیگر) دارند باشند. هر زمان که ساختمان داده پیچیدهای درون یک ساحتمان داده پیچیده قرار گیرد، از این وضعیت به صورت «تودرتو سازی» (Nesting) یاد میکنیم.
اینک که به صورت فشرده با JSON آشنا شدیم، به موضوع اصلی مقاله بازمیگردیم.
تبدیل یک شیئ به یک آرایه
زمانی که یک شیئ را به یک آرایه تبدیل میکنیم از متد ()entries. در کلاس Object بهره خواهیم گرفت. بدین ترتیب شیئ ما به یک آرایه از آرایهها تبدیل میشود. هر آرایه تودرتو یک لیست دو مقداری است که آیتم نخست کلید و آیتم دوم شامل مقدار است.
اما این متد در زمان تبدیل اشیای پیچیدهای که خود شامل شیءها و یا آرایههای تودرتو هستند چگونه عمل میکند؟ بهترین راه تست عملی آن است:
توجه کنید که آرایه یا شیء تودرتو در لیست دو آیتمی به مقدار دوم تبدیل میشود. این متد اشیای تودرتو را به صورت بازگشتی به آرایه تبدیل نمیکند. تنها سطح فوقانی تبدیل خواهد شد.
تبدیل یک آرایه به یک شیئ
قبلاً تبدیل یک شیئ به یک آرایه با استفاده از متدهای داخلی جاوا اسکریپت در کلاس Object یک مسیر یک طرفه محسوب میشد و امکان تبدیل معکوس وجود نداشت.
با این حال از نسخه ES2019/ES10 به بعد، متد ()fromEntries. معرفی شده است که یک آرایه از آرایه دو آیتمی را به یک شیئ تبدیل میکند و عملاً معکوس متد ()entries است. برای بررسی عملی آن کار را با یک مثال ساده آغاز میکنیم. نتیجه قابل پیشبینی است:
اما در مورد ساحتمان داده پیچیده چطور؟
همانند متد ()entries این متد نیز تنها آرایه سطح فوقانی را تبدیل میکند. آرایههای در عمق بیشتر و اشیا به همان صورت ارسال میشوند. اینک سؤال این است که اگر آرایه ما به درستی قالببندی نشده باشد چه اتفاقی رخ میدهد؟ اگر آرایه یک مقدار ابتدایی یا یک شیء داشته باشد چه میشود؟ اگر یک آرایه تودرتو کمتر از دو آیتم داشته باشد چطور؟ اگر آرایه تودرتو بیش از دو آیتم باشد چه اتفاقی رخ خواهد داد. در ادامه این سناریوها را بررسی میکنیم:
زمانی که یک شیء non-entry را ارسال میکنیم، متد یک خطای TypeError بازگشت میدهد.
اگر آرایه تودرتو خالی باشد، یعنی آیتمی نداشته باشد، جفت کلید-مقدار حاصل به صورت undefined: undefined خواهد بود، در حالی که با آرایه تودرتو با یک آیتم منفرد به صورت یک جفت کلید-مقدار با یک مقدار تعریفنشده رفتار میشود.
همچنین زمانی که آرایه تودرتو بیش از دو آیتم داشته باشد، آیتمهای مازاد نادیده گرفته میشوند.
اگر این مطلب برای شما مفید بوده است، آموزشها و مطالب زیر نیز به شما پیشنهاد میشوند:
- مجموعه آموزشهای JavaScript (جاوا اسکریپت)
- مجموعه آموزشهای برنامهنویسی
- آموزش جاوا اسکریپت (JavaScript)
- کار با JSON در جاوا اسکریپت — راهنمای کاربردی
- معکوس کردن آرایه در جاوا اسکریپت — به زبان ساده
==