آموزش جاوا اسکریپت مبتدی : آرایهها
در این درس به آرایهها خواهیم پرداخت - روشی ساده برای ذخیره لیستی از اقلام داده تحت یک نام متغیر واحد. در اینجا بررسی میکنیم که چرا این روش مفید است، سپس نحوه ایجاد یک آرایه، بازیابی، اضافه کردن و حذف اقلام ذخیره شده در یک آرایه و موارد دیگر را بررسی میکنیم.
آرایهها عموماً به عنوان «اشیاء لیستمانند» توصیف میشوند؛ آنها اساساً اشیاء منفردی هستند که حاوی چندین مقدار ذخیره شده در یک لیست هستند. اشیاء آرایه را میتوان در متغیرها ذخیره کرد و تقریباً مانند هر نوع مقدار دیگری با آنها برخورد کرد، با این تفاوت که میتوانیم به هر مقدار درون لیست به صورت جداگانه دسترسی پیدا کنیم و کارهای بسیار مفید و کارآمدی با لیست انجام دهیم، مانند حلقه زدن و انجام همان کار با هر مقدار. شاید ما یک سری اقلام محصول و قیمتهای آنها را در یک آرایه ذخیره کردهایم و میخواهیم روی همه آنها حلقه بزنیم و آنها را در یک فاکتور چاپ کنیم، در حالی که همه قیمتها را با هم جمع میکنیم و قیمت کل را در پایین چاپ میکنیم.
اگر آرایه نداشتیم، باید هر مورد را در یک متغیر جداگانه ذخیره میکردیم، سپس کدی را که چاپ و اضافه کردن را جداگانه برای هر مورد انجام میدهد، فراخوانی میکردیم. نوشتن این کار بسیار طولانیتر، کمکارآمدتر و مستعد خطاتر بود. اگر 10 مورد برای اضافه کردن به فاکتور داشتیم، از قبل آزاردهنده بود، اما در مورد 100 یا 1000 مورد چطور؟ بعداً در مقاله به این مثال باز خواهیم گشت. همانطور که در مقالات قبلی گفته شد، بیایید با وارد کردن چند مثال در کنسول توسعهدهنده مرورگر، اصول اولیه آرایهها را بیاموزیم.
آرایهها از براکتهای مربعی و آیتمهایی که با کاما از هم جدا میشوند، تشکیل شدهاند.
1- فرض کنید میخواهیم یک لیست خرید را در یک آرایه ذخیره کنیم. کد زیر را در کنسول وارد کنید:
2- در مثال بالا، هر آیتم یک رشته است، اما در یک آرایه میتوانیم انواع دادههای مختلفی را ذخیره کنیم - رشتهها، اعداد، اشیاء و حتی آرایههای دیگر. همچنین میتوانیم انواع دادهها را در یک آرایه واحد ترکیب کنیم - لازم نیست خودمان را به ذخیره فقط اعداد در یک آرایه و فقط رشتهها در آرایه دیگر محدود کنیم. به عنوان مثال:
3- قبل از ادامه، چند آرایه نمونه ایجاد کنید.
شما میتوانید طول یک آرایه (تعداد آیتمهای موجود در آن) را دقیقاً به همان روشی که طول یک رشته (بر حسب کاراکتر) را پیدا میکنید، با استفاده از ویژگی length پیدا کنید. موارد زیر را امتحان کنید:
دسترسی و تغییر آیتمهای آرایه
آرایهها، مجموعههای شمارهگذاریشده هستند. آیتمهای یک آرایه شمارهگذاری میشوند و از صفر شروع میشوند. این عدد، شماره آیتم نامیده میشود. بنابراین آیتم اول شماره ۰، آیتم دوم شماره ۱ و غیره دارد. میتوانید با استفاده از نمادگذاری براکت و ارائه شماره آیتم، به آیتمهای تکی در آرایه دسترسی پیدا کنید، همانطور که به حروف یک رشته دسترسی پیدا کردید.
1- دستور زیر را در کنسول خود وارد کنید:
2- همچنین میتوانید با دادن یک مقدار جدید به یک آیتم آرایه، آن را تغییر دهید. این را امتحان کنید:
3- توجه داشته باشید که یک آرایه درون یک آرایه دیگر، آرایه چندبعدی نامیده میشود. میتوانید با زنجیر کردن دو مجموعه براکت به یکدیگر، به یک آیتم درون آرایهای که خود درون آرایه دیگری است، دسترسی پیدا کنید. برای مثال، برای دسترسی به یکی از آیتمهای درون آرایه که سومین آیتم درون آرایه تصادفی است (به بخش قبل مراجعه کنید)، میتوانیم کاری شبیه به این انجام دهیم:
4- قبل از ادامه، سعی کنید تغییرات بیشتری در مثالهای آرایه خود ایجاد کنید. کمی با آنها بازی کنید و ببینید چه چیزی کار میکند و چه چیزی کار نمیکند.
پیدا کردن شماره آیتمها در یک آرایه
اگر شماره یک آیتم را نمیدانید، میتوانید از متد استفاده کنید. متد یک آیتم را به عنوان ورودی دریافت میکند و یا شماره آیتم را برمیگرداند یا اگر آیتم در آرایه نباشد، مقدار ۱- را برمیگرداند:
برای اضافه کردن یک یا چند آیتم به انتهای یک آرایه، میتوانیم از استفاده کنیم. توجه داشته باشید که باید یک یا چند آیتمی را که میخواهید به انتهای آرایه خود اضافه کنید، وارد کنید.
طول جدید آرایه پس از اتمام فراخوانی متد، بازگردانده میشود. اگر میخواستید طول جدید آرایه را در یک متغیر ذخیره کنید، میتوانستید کاری شبیه به این انجام دهید:
برای اضافه کردن یک عنصر به ابتدای آرایه، از استفاده کنید:
برای حذف آخرین عنصر از آرایه، از تابع استفاده کنید.
متد آیتمی را که حذف شده است برمیگرداند. برای ذخیره آن آیتم در یک متغیر جدید، میتوانید این کار را انجام دهید:
برای حذف اولین عنصر از یک آرایه، از استفاده کنید:
اگر اندیس یک آیتم را میدانید، میتوانید با استفاده از آن را از آرایه حذف کنید:
در این فراخوانی تابع ، ورودی اول میگوید که حذف آیتمها از کجا شروع شود و ورودی دوم میگوید که چند آیتم باید حذف شوند. بنابراین میتوانید بیش از یک آیتم را حذف کنید:
خیلی اوقات شما میخواهید به تک تک عناصر آرایه دسترسی داشته باشید. میتوانید این کار را با استفاده از دستور انجام دهید:
گاهی اوقات میخواهید روی تک تک آیتمهای یک آرایه، کار یکسانی انجام دهید و آرایهای حاوی آیتمهای تغییر یافته داشته باشید. میتوانید این کار را با استفاده از انجام دهید. کد زیر یک آرایه از اعداد را میگیرد و هر عدد را دو برابر میکند:
ما یک تابع به میدهیم و برای هر آیتم در آرایه، یک بار تابع را فراخوانی میکند و آیتم را ارسال میکند. سپس مقدار بازگشتی از هر فراخوانی تابع را به یک آرایه جدید اضافه میکند و در نهایت آرایه جدید را برمیگرداند.
گاهی اوقات میخواهید یک آرایه جدید ایجاد کنید که فقط شامل آیتمهای آرایه اصلی باشد که با یک تست مطابقت دارند. میتوانید این کار را با استفاده از انجام دهید. کد زیر آرایهای از رشتهها را میگیرد و آرایهای را برمیگرداند که فقط شامل رشتههایی است که طول آنها بیش از ۸ کاراکتر است:
مانند ، ما یک تابع به متد میدهیم و این تابع را برای هر آیتم در آرایه فراخوانی میکند و آیتم را به آن ارسال میکند. اگر تابع مقدار true را برگرداند، آیتم به یک آرایه جدید اضافه میشود. در نهایت آرایه جدید را برمیگرداند.
تبدیل بین رشتهها و آرایهها
اغلب با دادههای خامی مواجه میشوید که در یک رشتهی طولانی و بزرگ قرار دارند و ممکن است بخواهید موارد مفید را به شکلی مفیدتر جدا کنید و سپس روی آنها کارهایی انجام دهید، مانند نمایش آنها در یک جدول داده. برای انجام این کار، میتوانیم از متد استفاده کنیم. در سادهترین شکل، این متد یک پارامتر واحد، کاراکتری که میخواهید رشته را در آن جدا کنید، میگیرد و زیررشتههای بین جداکننده را به عنوان آیتمهایی در یک آرایه برمیگرداند.
خب، این از نظر فنی یک متد رشتهای است، نه یک متد آرایهای، اما ما آن را با آرایهها قرار دادهایم، همانطور که اینجا خوب پیش میرود.
۱- بیایید با این کار کنیم تا ببینیم چگونه کار میکند. ابتدا، یک رشته در کنسول خود ایجاد کنید:
۲- حالا بیایید آن را در هر کاما تقسیم کنیم:
۳- در نهایت، سعی کنید طول آرایه جدید خود را پیدا کنید و برخی از موارد را از آن بازیابی کنید:
۴- همچنین میتوانید با استفاده از متد به روش برعکس عمل کنید. موارد زیر را امتحان کنید:
۵- روش دیگر برای تبدیل یک آرایه به رشته، استفاده از متد است. مسلماً سادهتر از است زیرا پارامتری نمیگیرد، اما محدودتر است. با میتوانید جداکنندههای مختلفی تعیین کنید، در حالی که همیشه از کاما استفاده میکند. (سعی کنید مرحله ۴ را با کاراکتری متفاوت از کاما اجرا کنید.)