آرایهها (Arrays) در جاوااسکریپت
بهنام نوبخت · ۱۴۰۵/۷/۱۱
در برنامهنویسی معمولاً با چندین مقدار مرتبط با یکدیگر سروکار داریم. برای مثال ممکن است بخواهیم نام چند کاربر، قیمت چند محصول، نمرات یک دانشآموز یا لیستی از شهرها را در برنامه ذخیره کنیم. اگر برای هر مقدار یک متغیر جداگانه ایجاد کنیم، مدیریت اطلاعات بسیار سخت خواهد شد.
آرایه (Array) در جاوااسکریپت ساختاری است که به ما اجازه میدهد چندین مقدار را در یک متغیر ذخیره کنیم. آرایهها یکی از مهمترین ساختارهای داده در جاوااسکریپت هستند و تقریباً در تمام پروژههای واقعی، از وبسایتهای ساده تا برنامههای پیچیده، کاربرد دارند.
در این مقاله از صفر با Array در جاوااسکریپت آشنا میشویم و نحوه ایجاد آرایه، دسترسی به عناصر، تغییر و حذف اطلاعات، اضافه کردن داده، پیمایش آرایه با حلقه، جستجو و بررسی عناصر و چند متد مهم آرایه را یاد میگیریم.
آرایه در جاوااسکریپت چیست؟
آرایه مجموعهای از چند مقدار است که در یک متغیر ذخیره میشوند.
مثلاً:
let fruits = ["Apple", "Banana", "Orange"];در اینجا متغیر fruits شامل سه مقدار است:
Apple
Banana
Orangeبدون آرایه مجبور بودیم بنویسیم:
let fruit1 = "Apple";
let fruit2 = "Banana";
let fruit3 = "Orange";اما استفاده از آرایه بسیار سادهتر است:
let fruits = ["Apple", "Banana", "Orange"];بنابراین میتوان گفت:
Array برای نگهداری مجموعهای از مقادیر در یک ساختار واحد استفاده میشود.
ساخت آرایه
سادهترین روش ایجاد آرایه استفاده از براکت [] است:
let numbers = [10, 20, 30, 40, 50];همچنین میتوانیم یک آرایه خالی ایجاد کنیم:
let users = [];بعداً میتوانیم اطلاعات را به آن اضافه کنیم.
آرایه میتواند انواع مختلف داده داشته باشد
در جاوااسکریپت یک آرایه میتواند شامل انواع مختلف داده باشد.
مثلاً:
let data = [
"Ali",
25,
true,
10.5
];در این آرایه:
"Ali"یک String است.25یک Number است.trueیک Boolean است.10.5یک Number است.
با این حال، در پروژههای واقعی معمولاً بهتر است آرایهها ساختار منطقی و مشخصی داشته باشند.
Index در آرایه چیست؟
هر عنصر آرایه یک شماره دارد که به آن Index گفته میشود.
نکته بسیار مهم این است که شمارهگذاری آرایه از صفر شروع میشود.
مثلاً:
let fruits = ["Apple", "Banana", "Orange"];ساختار آن:
Index: 0 1 2
↓ ↓ ↓
Value: Apple Banana Orangeبنابراین:
fruits[0] → Apple
fruits[1] → Banana
fruits[2] → Orangeاین موضوع یکی از اولین نکاتی است که هنگام کار با Array باید بهخوبی یاد بگیرید.
دسترسی به عنصر آرایه
برای دسترسی به یک عنصر از براکت و Index استفاده میکنیم:
let fruits = ["Apple", "Banana", "Orange"];
console.log(fruits[0]);خروجی:
Appleبرای عنصر دوم:
console.log(fruits[1]);خروجی:
Bananaبرای عنصر سوم:
console.log(fruits[2]);خروجی:
Orangeتغییر مقدار یک عنصر
عناصر آرایه قابل تغییر هستند.
مثلاً:
let fruits = ["Apple", "Banana", "Orange"];
fruits[1] = "Mango";
console.log(fruits);خروجی:
["Apple", "Mango", "Orange"]در اینجا مقدار Index شماره ۱ را تغییر دادیم.
تعداد عناصر آرایه با length
برای فهمیدن تعداد عناصر یک آرایه از ویژگی length استفاده میکنیم.
let fruits = ["Apple", "Banana", "Orange"];
console.log(fruits.length);خروجی:
3مثال دیگر:
let numbers = [10, 20, 30, 40, 50];
console.log(numbers.length);خروجی:
5آخرین عنصر آرایه
چون Index از صفر شروع میشود، آخرین عنصر همیشه در Index زیر قرار دارد:
array.length - 1مثلاً:
let fruits = ["Apple", "Banana", "Orange"];
console.log(fruits[fruits.length - 1]);خروجی:
Orangeاین روش بسیار کاربردی است، چون لازم نیست Index آخر را بهصورت دستی بدانیم.
اضافه کردن عنصر با push
برای اضافه کردن یک عنصر به انتهای آرایه از push() استفاده میکنیم.
let fruits = ["Apple", "Banana"];
fruits.push("Orange");
console.log(fruits);خروجی:
["Apple", "Banana", "Orange"]میتوانیم چند مقدار را نیز اضافه کنیم:
fruits.push("Mango", "Grapes");حذف آخرین عنصر با pop
متد pop() آخرین عنصر آرایه را حذف میکند.
let fruits = ["Apple", "Banana", "Orange"];
fruits.pop();
console.log(fruits);خروجی:
["Apple", "Banana"]pop() علاوه بر حذف عنصر، مقدار حذفشده را نیز برمیگرداند.
let fruits = ["Apple", "Banana", "Orange"];
let removedFruit = fruits.pop();
console.log(removedFruit);خروجی:
Orangeاضافه کردن عنصر به ابتدای آرایه با unshift
برای اضافه کردن یک عنصر به ابتدای آرایه از unshift() استفاده میکنیم:
let fruits = ["Banana", "Orange"];
fruits.unshift("Apple");
console.log(fruits);خروجی:
["Apple", "Banana", "Orange"]حذف اولین عنصر با shift
متد shift() اولین عنصر آرایه را حذف میکند:
let fruits = ["Apple", "Banana", "Orange"];
fruits.shift();
console.log(fruits);خروجی:
["Banana", "Orange"]مانند pop()، متد shift() نیز مقدار حذفشده را برمیگرداند.
خلاصه متدهای اصلی اضافه و حذف
متد | کاربرد |
|---|---|
| اضافه کردن به انتهای آرایه |
| حذف از انتهای آرایه |
| اضافه کردن به ابتدای آرایه |
| حذف از ابتدای آرایه |
پیمایش آرایه با for
یکی از مهمترین کارها هنگام استفاده از آرایه، پیمایش عناصر آن است.
برای این کار میتوانیم از حلقه for استفاده کنیم.
let fruits = ["Apple", "Banana", "Orange"];
for (let i = 0; i < fruits.length; i++) {
console.log(fruits[i]);
}خروجی:
Apple
Banana
Orangeدر اینجا:
i = 0از اولین عنصر شروع میکنیم.
شرط:
i < fruits.lengthباعث میشود تا زمانی که i از تعداد عناصر کمتر است، حلقه ادامه پیدا کند.
و:
fruits[i]عنصر مربوط به Index فعلی را دریافت میکند.
چرا از i < length استفاده میکنیم؟
فرض کنید آرایه ما سه عنصر دارد:
let fruits = ["Apple", "Banana", "Orange"];طول آرایه:
3اما Indexها:
0
1
2بنابراین باید بنویسیم:
i < fruits.lengthنه:
i <= fruits.lengthاگر از <= استفاده کنیم، در آخر به fruits[3] میرسیم که وجود ندارد.
تغییر تمام عناصر با حلقه
میتوانیم با حلقه تمام عناصر آرایه را تغییر دهیم.
مثلاً:
let numbers = [1, 2, 3, 4, 5];
for (let i = 0; i < numbers.length; i++) {
numbers[i] = numbers[i] * 2;
}
console.log(numbers);خروجی:
[2, 4, 6, 8, 10]جستجو در آرایه با indexOf
برای پیدا کردن Index یک مقدار میتوانیم از indexOf() استفاده کنیم.
let fruits = ["Apple", "Banana", "Orange"];
console.log(fruits.indexOf("Banana"));خروجی:
1اگر مقدار وجود نداشته باشد:
console.log(fruits.indexOf("Mango"));خروجی:
-1بنابراین -1 نشان میدهد مقدار موردنظر پیدا نشده است.
بررسی وجود عنصر با includes
اگر فقط میخواهیم بدانیم یک مقدار در آرایه وجود دارد یا خیر، includes() گزینه سادهای است.
let fruits = ["Apple", "Banana", "Orange"];
console.log(fruits.includes("Banana"));خروجی:
trueاما:
console.log(fruits.includes("Mango"));خروجی:
falseتبدیل آرایه به متن با join
متد join() عناصر آرایه را به یک String تبدیل میکند.
مثلاً:
let fruits = ["Apple", "Banana", "Orange"];
console.log(fruits.join(", "));خروجی:
Apple, Banana, Orangeمیتوانیم جداکننده دیگری نیز مشخص کنیم:
console.log(fruits.join(" - "));خروجی:
Apple - Banana - Orangeجدا کردن بخشی از آرایه با slice
متد slice() برای گرفتن بخشی از آرایه استفاده میشود.
مثلاً:
let fruits = ["Apple", "Banana", "Orange", "Mango"];
let result = fruits.slice(1, 3);
console.log(result);خروجی:
["Banana", "Orange"]نکته مهم این است که Index شروع شامل میشود، اما Index پایان شامل نمیشود.
یعنی:
Start → included
End → excludedحذف یا جایگزینی با splice
متد splice() میتواند عناصر آرایه را حذف، اضافه یا جایگزین کند.
مثلاً:
let fruits = ["Apple", "Banana", "Orange"];
fruits.splice(1, 1);
console.log(fruits);خروجی:
["Apple", "Orange"]در اینجا:
splice(1, 1)یعنی:
از Index شماره ۱ شروع کن.
یک عنصر حذف کن.
اضافه کردن عنصر با splice
میتوانیم بدون حذف عنصر، مقدار جدیدی اضافه کنیم:
let fruits = ["Apple", "Orange"];
fruits.splice(1, 0, "Banana");
console.log(fruits);خروجی:
["Apple", "Banana", "Orange"]در اینجا:
splice(1, 0, "Banana")یعنی از Index شماره ۱ شروع کن، صفر عنصر حذف کن و "Banana" را اضافه کن.
مرتبسازی آرایه با sort
برای مرتبسازی عناصر از sort() استفاده میکنیم.
مثلاً:
let fruits = ["Orange", "Apple", "Banana"];
fruits.sort();
console.log(fruits);خروجی:
["Apple", "Banana", "Orange"]اما هنگام مرتبسازی اعداد باید دقت بیشتری داشته باشیم.
مثلاً:
let numbers = [10, 2, 30, 5];
numbers.sort();
console.log(numbers);ممکن است نتیجهای مطابق انتظار عددی نداشته باشد، زیرا رفتار پیشفرض sort() عناصر را بهصورت متنی مقایسه میکند.
برای مرتبسازی عددی صعودی:
numbers.sort((a, b) => a - b);خروجی:
[2, 5, 10, 30]جزئیات Arrow Function و Callbackها را در ادامه دوره با جزئیات بیشتری بررسی خواهیم کرد.
reverse برای برعکس کردن آرایه
متد reverse() ترتیب عناصر را برعکس میکند.
let numbers = [1, 2, 3, 4, 5];
numbers.reverse();
console.log(numbers);خروجی:
[5, 4, 3, 2, 1]for...of برای پیمایش آرایه
جاوااسکریپت روش ساده دیگری برای پیمایش آرایه دارد: for...of.
مثال:
let fruits = ["Apple", "Banana", "Orange"];
for (let fruit of fruits) {
console.log(fruit);
}خروجی:
Apple
Banana
Orangeاین روش زمانی که فقط به مقدار عناصر نیاز داریم بسیار خوانا است.
تفاوت for معمولی و for...of
روش معمولی:
for (let i = 0; i < fruits.length; i++) {
console.log(fruits[i]);
}روش for...of:
for (let fruit of fruits) {
console.log(fruit);
}اگر به Index نیاز داشته باشیم، for معمولی میتواند مناسبتر باشد.
اگر فقط میخواهیم مقدار هر عنصر را دریافت کنیم، for...of خواناتر است.
آرایه و شرط if
میتوانیم آرایه را با شرطها ترکیب کنیم.
مثلاً:
let numbers = [10, 15, 20, 25, 30];
for (let number of numbers) {
if (number > 20) {
console.log(number);
}
}خروجی:
25
30در این مثال از دو مفهوم مهم قبلی استفاده کردهایم:
حلقه
شرط
مثال کاربردی: محاسبه مجموع قیمتها
فرض کنید قیمت چند محصول را داریم:
let prices = [100000, 250000, 300000, 150000];
let total = 0;
for (let price of prices) {
total += price;
}
console.log(total);خروجی:
800000این یکی از کاربردهای واقعی آرایهها است.
مثال کاربردی: پیدا کردن بزرگترین عدد
فرض کنید:
let numbers = [15, 42, 8, 73, 21];
let max = numbers[0];
for (let number of numbers) {
if (number > max) {
max = number;
}
}
console.log(max);خروجی:
73در این مثال ابتدا اولین عنصر را بهعنوان بزرگترین مقدار در نظر گرفتیم و سپس بقیه عناصر را بررسی کردیم.
مثال کاربردی: شمارش اعداد زوج
let numbers = [10, 15, 22, 31, 40, 55];
let count = 0;
for (let number of numbers) {
if (number % 2 === 0) {
count++;
}
}
console.log(count);خروجی:
3سه عدد زوج در آرایه وجود دارد.
آرایه تو در تو (دو بعدی)
یک آرایه میتواند شامل آرایههای دیگری نیز باشد.
مثلاً:
let numbers = [
[1, 2, 3],
[4, 5, 6]
];در این حالت:
console.log(numbers[0]);
خروجی:
[1, 2, 3]
برای دسترسی به عدد ۵:
console.log(numbers[1][1]);
خروجی:
5در پروژههای واقعی آرایههای چندبعدی میتوانند برای دادههای جدولی و ساختارهای پیچیدهتر استفاده شوند.
کپی کردن آرایه
هنگام کار با آرایهها باید با مفهوم Reference نیز آشنا شویم.
مثلاً:
let numbers = [1, 2, 3];
let otherNumbers = numbers;
otherNumbers.push(4);
console.log(numbers);خروجی:
[1, 2, 3, 4]چرا آرایه اصلی نیز تغییر کرد؟
زیرا numbers و otherNumbers به همان آرایه اشاره میکنند.
برای ساخت یک کپی مستقل میتوانیم از Spread Operator استفاده کنیم:
let numbers = [1, 2, 3];
let otherNumbers = [...numbers];
otherNumbers.push(4);
console.log(numbers);
console.log(otherNumbers);خروجی:
[1, 2, 3]
[1, 2, 3, 4]Spread Operator را در بخش جاوااسکریپت مدرن با جزئیات بیشتری بررسی خواهیم کرد.
اشتباهات رایج در کار با آرایهها
۱. فراموش کردن اینکه Index از صفر شروع میشود
اشتباه:
let fruits = ["Apple", "Banana", "Orange"];
console.log(fruits[1]);اگر انتظار داشته باشید Apple نمایش داده شود، اشتباه است.
Index اول:
0 → Apple
1 → Banana
2 → Orange۲. دسترسی به Index ناموجود
let fruits = ["Apple", "Banana"];
console.log(fruits[10]);نتیجه:
undefinedچون چنین Indexای وجود ندارد.
۳. استفاده اشتباه از <=
اشتباه:
for (let i = 0; i <= fruits.length; i++) {
console.log(fruits[i]);
}بهتر است بنویسیم:
for (let i = 0; i < fruits.length; i++) {
console.log(fruits[i]);
}۴. اشتباه گرفتن push و unshift
push به انتها اضافه میکند:
fruits.push("Mango");unshift به ابتدا اضافه میکند:
fruits.unshift("Mango");۵. اشتباه گرفتن pop و shift
pop از انتها حذف میکند.
shift از ابتدا حذف میکند.
نکات مهم برای کار با Array
هنگام کار با آرایهها این موارد را به خاطر بسپارید:
Index آرایه از صفر شروع میشود.
lengthتعداد عناصر را مشخص میکند.push()به انتها اضافه میکند.pop()از انتها حذف میکند.unshift()به ابتدا اضافه میکند.shift()از ابتدا حذف میکند.includes()وجود یک مقدار را بررسی میکند.indexOf()محل یک مقدار را پیدا میکند.slice()بخشی از آرایه را استخراج میکند.splice()برای حذف، اضافه یا جایگزینی عناصر استفاده میشود.forوfor...ofبرای پیمایش آرایه کاربرد دارند.
تمرینهای عملی
تمرین ۱
آرایهای شامل پنج نام ایجاد کنید و تمام نامها را با استفاده از حلقه for نمایش دهید.
تمرین ۲
آرایهای شامل چند عدد ایجاد کنید و مجموع تمام اعداد را محاسبه کنید.
مثلاً:
let numbers = [10, 20, 30, 40];
تمرین ۳
برنامهای بنویسید که تعداد اعداد زوج یک آرایه را محاسبه کند.
تمرین ۴
یک آرایه از نام چند شهر ایجاد کنید و بررسی کنید آیا "Istanbul" در آرایه وجود دارد یا خیر.
از includes() استفاده کنید.
تمرین ۵
یک آرایه از پنج عدد ایجاد کنید، سپس:
عدد اول را حذف کنید.
یک عدد جدید به انتهای آرایه اضافه کنید.
آرایه نهایی را نمایش دهید.
تمرین ۶
بزرگترین عدد یک آرایه را بدون استفاده از Math.max() پیدا کنید.
تمرین چالشی
آرایه زیر را در نظر بگیرید:
let numbers = [12, 7, 25, 4, 18, 31, 9];
برنامهای بنویسید که:
تعداد عناصر را نمایش دهد.
مجموع عناصر را محاسبه کند.
میانگین را محاسبه کند.
بزرگترین عدد را پیدا کند.
کوچکترین عدد را پیدا کند.
فقط اعداد زوج را نمایش دهد.
در این تمرین سعی کنید از مفاهیمی که تاکنون یاد گرفتهاید یعنی متغیرها، عملگرها، شرطها، حلقهها و توابع استفاده کنید.
جمعبندی
در این مقاله با یکی از مهمترین ساختارهای داده در جاوااسکریپت یعنی Array آشنا شدیم.
یاد گرفتیم:
آرایه چیست.
چگونه یک Array ایجاد کنیم.
Index چگونه کار میکند.
چرا Index از صفر شروع میشود.
چگونه به عناصر آرایه دسترسی پیدا کنیم.
چگونه مقدار یک عنصر را تغییر دهیم.
چگونه تعداد عناصر را با
lengthبه دست آوریم.چگونه با
push()وunshift()عنصر اضافه کنیم.چگونه با
pop()وshift()عنصر حذف کنیم.چگونه آرایه را با حلقه پیمایش کنیم.
چگونه با
indexOf()جستجو کنیم.چگونه با
includes()وجود یک عنصر را بررسی کنیم.چگونه با
slice()بخشی از آرایه را دریافت کنیم.چگونه با
splice()عناصر را حذف یا اضافه کنیم.چگونه آرایهها را مرتب و معکوس کنیم.
چگونه از
for...ofاستفاده کنیم.چگونه آرایه را با شرطها و حلقهها ترکیب کنیم.
مفهوم ساده Reference در آرایهها چیست.
چگونه یک کپی مستقل از آرایه ایجاد کنیم.
آرایهها یکی از پایههای اصلی جاوااسکریپت هستند و در پروژههای واقعی تقریباً همیشه با آنها سروکار خواهید داشت.
نظرات
هنوز نظری ثبت نشده است.