آرایه (Array) ساختمان داده ای است که از خانه های پشت سرهم و معمولا هم نوع تشکیل شده و می تواند دارای چندین بُعد (dimension) باشد. به صورت ساده می توان گفت به جای اینکه بیاییم در برنامه های خود متغیرهایی با نام های مختلف در نظر بگیریم می توانیم از آرایه (Array) استفاده کنیم. آرایه ها براساس Index یا اندیس کار می کنند، یعنی اگر بخواهیم به آنها مقدار دهیم باید با اندیس آنها کار کنیم. کوچکترین اندیس همیشه اولین خانه آرایه و بیشترین اندیس همیشه آخرین آدرس آرایه خواهد بود. بنابراین ما از آرایه های جاوا اسکریپت به منظور ذخیره سازی چندین مقدار در یک متغیر استفاده می کنیم.
آرایه های جاوا اسکریپت به منظور ذخیره سازی چندین مقدار در یک متغیر استفاده می شوند. مثال زیر نحوه تعریف یک آرایه در جاوا اسکریپت را نشان می دهد:
;["var cars = ["Saab", "Volvo", "BMW
آرایه (Array)
آرایه یک متغیر به خصوص است که می تواند هربار بیشتر از یک مقدار را در خود ذخیره کند.
اگر شما یک لیست از آیتم ها داشته باشید، به عنوان مثال لیستی از اسامی ماشین ها، ذخیره سازی ماشین ها در متغیرهای تکی و جداگانه به شکل زیر خواهد بود:
ساخت آرایه
برای ایجاد یک آرایه جاوا اسکریپت می توانید از قاعده نوشتاری زیر استفاده کنید: در این تعریف array_name نام آرایه می باشد.
;var array_name = [item1, item2, ...]
مثال زیر نحوه تعریف یک آرایه با نام cars را نشان می دهد که برای ذخیره سازی لیستی از اسامی ماشین ها استفاده می شود:
;var cars = ["Saab", "Volvo", "BMW"]
در تعریف آرایه فضاهای خالی و شکستگی های خطوط مهم نیستند. یک اعلان آرایه می تواند چندین خط را در بر بگیرد.
استفاده از کلید واژه new در جاوا اسکریپت
شما همچنین می توانید یک آرایه را به شکل زیر با استفاده از کلمه کلیدی new بسازید و مقادیری را به آن انتساب دهید.
;var cars = new Array("Saab", "Volvo", "BMW")
شما می توانید از هر دو روش تعریف آرایه استفاده نمایید زیرا هر دو یک کارایی را دارند.
دسترسی به عناصر یک آرایه
برای دسترسی به عناصر آرایه شما می توانید از یک اندیس (index) که شماره خانه ای از آرایه است استفاده کنید و به عنصر مورد نظر دسترسی داشته باشید.
این دستور به مقدار اولین عنصر در آرایه cars دسترسی پیدا می کند. دقت کنید که مقدار اندیس در آرایه ها از صفر شروع می شود و مقدار [0] اشاره به اولین عنصر آرایه دارد.
;var name = cars[0]
در مثال زیر با استفاده از cars[0] به مقدار Saab که اولین عنصر آرایه است دسترسی پیدا می کنیم.
تغییر عنصر آرایه
بعد از تعریف آرایه شما همانطور که با متغیرها کار می کنید می توانید با آرایه کار کنید و به عناصر آرایه دسترسی داشته باشید. این دستور مقدار اولین عنصر در آرایه cars را تغییر می دهد:
;cars[0] = "Opel"
دسترسی به همه عناصر آرایه
در زبان جاوا اسکریپت، با استفاده از نام آرایه می توان به همه عناصر آرایه دسترسی پیدا کرد:
آرایه ها Object هستند
آرایه ها نوع خاصی از اشیا هستند. اگر عملگر typeof در جاوا اسکریپت را برای آرایه ها به کار ببریم مقدار "object" را برای ما بر می گرداند.
آرایه ها در جاوا اسکریپت از اعداد برای دسترسی به عنصرهایشان استفاده می کنند. در این مثال، person[0] ، مقدار John را بر می گرداند.
;var person = ["John", "Doe", 46]
در زبان جاوا اسکریپت اشیا از اسامی برای دسترسی به اعضایشان استفاده می کنند. در مثال زیرعبارت person.firstName مقدار John را بر می گرداند.
;var person = {firstName:"John", lastName:"Doe", age:46}
عناصر یک آرایه می توانند Object باشند
متغیرهای جاوا اسکریپت می توانند اشیا محسوب شوند. از طرفی آرایه ها یک نوع خاصی از اشیا می باشند. به همین دلیل عناصر یک آرایه می توانند object باشند. می توانید در یک آرایه توابع را داشته باشید یا اصلا می توانید خود آرایه ها را در یک آرایه داشته باشید. مثال زیر نحوه انجام این کار را نشان می دهد.
متد ها و مشخصه های یک آرایه
در حقیقت کاربرد اصلی آرایه های جاوا اسکریپت مشخصه ها و متد های تعبیه شده در آن می باشد. مشخصه ها و متد هایی که یک سری عملیات را برای ما آسان می کنند.
متد های آرایه ها را در بخش بعدی طی یک مقاله کامل مطرح کرده ایم.
مشخصه طول
با استفاده از مشخصه length ما می توانیم طول یک آرایه ( تعداد عنصرهای آرایه ) در جاوا اسکریپت را به دست آوریم.
دستیابی به اولین عنصر آرایه
دستیابی به آخرین عنصر آرایه
پیمایش عنصر های آرایه
بهترین راه برای پیمایش عنصر های یک آرایه، استفاده از یک حلقه ی for می باشد. مثال زیر نحوه انجام این کار را نشان می دهد:
شما همچنین می توانید برای پیمایش عناصر یک آرایه از تابع ()Array.forEach به شکل زیر استفاده کنید:
اضافه کردن عنصر جدید به آرایه
آسان ترین راه برای اضافه کردن عنصرهای جدید به یک آرایه استفاده از متد ()push است: مثال زیر نحوه انجام این کار را نشان می دهد:
شما همچنین می توانید با کمک گرفتن از مشخصه ی length آرایه، یک عنصر جدید را به آرایه اضافه کنید:
هشدار!!
اضافه کردن عنصر های جدید با ایندکس هایی با اعداد بالا می تواند باعث ایجاد خانه های خالی زیادی در یک آرایه شود و فضای بیشتری از Ram را درگیر کنید.
آرایه های شرکت پذیر
بسیاری از زبان های برنامه نویسی از آرایه ها با ایندکس های نام گذاری شده پشتیبانی می کنند. آرایه ها با ایندکس های نام گذاری شده، آرایه های شرکت پذیر نامیده می شوند. جاوا اسکریپت از آرایه ها با ایندکس های نام گذاری شده پشتیبانی نمی کند. در جاوا اسکریپت، آرایه ها همیشه از ایندکس های عددی استفاده می کنند.
هشدار!!
اگر از ایندکس های نام گذاری شده استفاده کنید، جاوا اسکریپت آرایه را به یک object استاندارد بازتعریف خواهد کرد. و این کار باعث می شود که برخی از متدها و مشخصه های آرایه، پاسخ و خروجی های غلط تولید کنند.
تفاوت بین آرایه ها و اشیا
- در جاوا اسکریپت، آرایه ها از ایندکس های عددی استفاده می کنند.
- در جاوا اسکریپت، اشیا از ایندکس های نام گذاری شده استفاده می کنند.
زمان استفاده از آرایه و زمان استفاده از اشیا
- جاوا اسکریپت از آرایه های شرکت پذیر پشتیبانی نمی کند.
- وقتی که می خواهید اسامی عنصرها به رشته (متن) تبدیل شوند، باید از اشیا استفاده کنید.
- وقتی که می خواهید اسامی عنصرها به اعداد تبدیل شوند باید از آرایه ها استفاده کنید.
از به کار بردن ()new Array اجتناب کنید
نیازی به استفاده از آرایه ی سازنده تعبیه شده در جاوا اسکریپت یعنی ()new Array نمی باشد.
به جای آن از [] استفاده کنید.
این دو دستور متفاوت هر دو یک آرایه ی خالی می سازند:
در مثال زیر هر دو تعریف، یک آرایه ی خالی که شمل 6 عدد می باشد را می سازند:
کلید واژه ی new فقط کد را پیچیده تر می کند. همچنین می تواند باعث یکسری پاسخ های غیرقابل انتظار شود:
اگر یکی از عنصر ها را حذف کنیم چه اتفاقی رخ می دهد؟
همانطور که در مثال بالا می بینید، دستور بالا باعث ایجاد یک آرایه به طول 40 شده که تمامی خانه های آن مقدار undefined دارند.
چگونه یک آرایه را تشخیص دهیم
یک سوال خیلی متعارف این است که: چگونه بفهمیم که یک متغیر آرایه می باشد؟ مشکل اینجاست که عملگر typeof در جاوا اسکریپت نوع آرایه را object بر می گرداند:
عملگر typeof نوع یک آرایه را Object بر می گرداند زیرا آرایه جاوا اسکریپت یک شی محسوب می شود.
راه حل اول: برای حل کردن این مشکل ECMAScript 5 یک متد جدید به نام ()Array.isArray تعریف کرده است:
Array.isArray(fruits); // returns true
اما مشکل این راه حل این است که ECMAScript 5 در مرورگر های قدیمی پشتیبانی نمی شود.
راه حل دوم: برای حل این مشکل شما می توانید تابع ()isArray شخصی خودتان را بسازید. کد زیر نحوه نوشتن این تابع را نشان دهد:
تابع بالا همیشه در صورتی که ورودی یک آرایه باشد، کلمه true را، برمی گرداند.