در جاوا اسکریپت، آرایه های چند بعدی، آرایه هایی از آرایه ها هستند. برای دسترسی به عنصری از مثلاً یک آرایه دو بعدی، باید دو بار عملگر را مشخص کنید.

فرض کنید ماتریس متغیر آرایه ای از آرایه های اعداد صحیح است. هر یک از عناصر ماتریس[j] آرایه ای از اعداد است. برای اشاره به یک عدد واحد، از نماد استفاده می کنیم: matrix[j][k].

مثال. برای ایجاد جدول ضرب از یک آرایه دو بعدی استفاده می کنیم.

var matrix = new Array(10); // 10 ردیف در ماتریس وجود دارد

for(var j = 0; j< matrix.length; j++)

matrix[j] = new Array(10); //d هر سطر 10 ستون ایجاد می کند

for(var row = 0; row< matrix.length; row++) {

for(col = 0; col< matrix .length; col++) {

ماتریس = row*col; // پر کردن عناصر آرایه

نتیجه var = ماتریس ; // نتیجه ضرب 24

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

menu = new Array();

منو = آرایه جدید ("گزینه 1.1"، "گزینه 1.2"، "گزینه 1.3")؛

menu = آرایه جدید ("گزینه 2.1"، "گزینه 2. 2");

menu = new Array ("گزینه 3.1"، "گزینه 3.2"، "گزینه 3.3"، "گزینه 3.4");

برای دسترسی به گزینه 1 از منوی فرعی دوم، باید بنویسید:

منو // مقدار "گزینه 2.1" است.

بیایید ساختار آرایه را طوری تغییر دهیم که هم نام گزینه‌های منوی اصلی و هم گزینه‌های زیرمنو را شامل شود:

منو = آرایه جدید ()

menu = آرایه جدید ("Menu1"، "Menu2"، "Menu3");

menu = new Array();

menu = new Array ("گزینه 1.1"، "گزینه 1.2"، "گزینه 1.3");

menu = آرایه جدید ("گزینه 2.1"، "گزینه 2. 2");

منو = آرایه جدید ("گزینه 3.1"، "گزینه 3.2"، "گزینه 3.3"، "گزینه 3.4")؛

منو // مقدار "Menu2" است

منو // مقدار "Menu3" است

مقدار منو // "گزینه 2.1" است

منوی // مقدار "گزینه 3.2" است

روش های آرایه

AT این بخشبیایید به روش هایی نگاه کنیم که توسط آنها می توانید عناصر آرایه ها را دستکاری کنید.

پیوستن() -روشی که هر یک از عناصر آرایه را به یک رشته تبدیل می کند و آنها را به هم متصل می کند. به عنوان یک آرگومان برای متد، می توانید یک رشته اختیاری را که برای جداسازی عناصر مجزا در رشته کل طراحی شده است، مشخص کنید. اگر جداکننده را مشخص نکنید، به طور پیش فرض برای تعیین حدود از کاما استفاده می شود.

var arr = ; // آرایه ای از سه عنصر داده شده است

varstr = arr.join(); // مقدار str "12,23,38" است

str = arr.join("; "); // str == "12; 23; 38"

همانطور که قبلا ذکر شد، متد Array.join() معکوس متد String.split() است که رشته ها را به عناصر آرایه تقسیم می کند.

معکوس() -روشی که ترتیب عناصر در یک آرایه را معکوس می کند. این روشآرایه جدیدی ایجاد نمی کند، اما ترتیب آنها را در آرایه اصلی تغییر می دهد.

var arr = آرایه جدید (1,2,3); // arr = 1، arr = 2، arr = 3

arr.reverse(); // arr = 3، arr = 2، arr = 1

var str = arr.join(); // str == "3،2،1"

مرتب سازی() -روشی که عناصر یک آرایه را در جای خود مرتب می کند و آرایه مرتب شده را برمی گرداند. اگر متد sort() بدون آرگومان فراخوانی شود، عناصر آرایه را بر اساس حروف الفبا مرتب می کند و آنها را به طور موقت به مقادیر رشته تبدیل می کند تا در صورت لزوم مقایسه انجام شود.

var arr = آرایه جدید ("موز"، "شری"، "سیب");

varstr = arr.join(", "); // str == "سیب، موز، گیلاس"

اگر یک عنصر تعریف نشده در آرایه وجود داشته باشد، به انتهای آرایه منتقل می شود.

برای مرتب کردن نه به ترتیب حروف الفبا، بلکه به روشی دیگر، تابع مقایسه به عنوان آرگومان به روش sort () منتقل می شود که وظیفه آن نشان دادن قاعده ای است که یکی از دو آرگومان آن زودتر قرار می گیرد. در لیست مرتب شده اگر آرگومان دوم باید قبل از آرگومان اول باشد، تابع مقایسه باید مقدار منفی برگرداند. اگر در یک آرایه مرتب شده، آرگومان اول باید از آرگومان دوم پیروی کند، آنگاه تابع باید یک عدد مثبت برگرداند. اگر دو مقدار معادل هستند، یعنی ترتیب آنها مهم نیست، تابع مقایسه باید 0 برگرداند. مثال.

بیایید به ترتیب عددی مرتب کنیم.

var arr = ;

arr.sort(); // به ترتیب حروف الفبا: 11111, 2222, 333, 44

arr.sort(function(اول، دوم) (//

بازگشت اول - دوم؛ ))؛ // ترتیب عددی: 44, 333, 2222, 11111

استفاده از یک تابع به معنای واقعی کلمه در این قطعه کد راحت است زیرا تابع مقایسه یک بار فراخوانی می شود و نیازی به نامگذاری آن نیست.

با تعریف توابع مرتب‌سازی دیگر، می‌توانید طیف گسترده‌ای از روش‌های مرتب‌سازی را پیاده‌سازی کنید.

concate() -متدی که یک آرایه جدید حاوی عناصر آرایه اصلی را ایجاد و برمی گرداند که با مقادیر تمام آرگومان های مشخص شده در متد concat() تکمیل می شود. در صورتی که آرگومان خود یک آرایه باشد، عناصر آن به آرایه نهایی اضافه خواهد شد. اما، باید توجه داشت که هنگام جداسازی آرایه ها از آرایه، بازگشتی انجام نمی شود.

var arr = ;

arr.concat(4، 5) // نتیجه

arr concat(); // نتیجه

arr concat (،) // نتیجه

arr concat (4، ]) // نتیجه ]

تکه() -روشی که یک زیرآرایه (قطعه) از آرایه اصلی را برمی گرداند. این روش دارای دو آرگومان است که شروع و پایان زیرآرایه برگشتی را نشان می دهد. آرایه برگردانده شده حاوی عناصری از آرایه ای است که شاخص آن با آرگومان اول مشخص شده است تا عنصری که تعداد آن توسط آرگومان دوم مشخص شده است اما شامل آن نمی شود.

اگر یک آرگومان واحد را مشخص کنید، آرایه برگشتی شامل عناصری از موقعیت مشخص شده توسط آرگومان تا انتهای آرایه خواهد بود. یک آرگومان منفی شماره عنصر آرایه را از انتهای آرایه مشخص می کند.

var arr = ;

arr.slice(0,3); // برگشت

arr برش (3)؛ // برگشت

arr برش (1,-1)؛ // برگشت

arr برش (-3،-2); // برگشت

splice()-یک روش عمومی که می تواند برای افزودن و حذف عناصر یک آرایه یا برای هر دو عملیات به طور همزمان استفاده شود. در نتیجه عملیات متد، آرایه اصلی تغییر می کند.

در متد splice() آرگومان اول شاخص آرایه ای را مشخص می کند که حذف و/یا درج از آن شروع می شود، آرگومان دوم تعداد عناصری که باید حذف شوند را مشخص می کند. اگر آرگومان دوم را حذف کنید، عناصر آرایه از موقعیتی که در آرگومان اول متد مشخص شده شروع می شود و تا انتهای آرایه حذف می شود. متد splice() را برمی گرداند آرایه ای از عناصر حذف شدهاگر آرگومان دوم 0 باشد، متد یک آرایه خالی برمی گرداند.

var arr = ;

arr.splice(4); // برمی گرداند؛ arr برابر می شود

arr.splice(1,2); // برمی گرداند؛ arr برابر می شود

دو آرگومان متد splice() که عناصر آرایه ای را که باید حذف شوند را مشخص می کند، می توان با هر عددیآرگومان‌های اضافی که عناصری را که باید در آرایه درج شوند، مشخص می‌کنند، که از شاخص ارائه‌شده توسط آرگومان اول متد شروع می‌شوند.

var arr = ;

arr.splice(2,0"ab""cd"); /* بر خواهد گشت ؛ arr می شود */

arr.splice(2،2،3); /* ["ab","cd"] را برمی گرداند. arr می شود ,3,33,44,55] */

باید این واقعیت را در نظر بگیرید که متد splice() آرگومان های آرایه را به عناصر درج شده جداگانه تقسیم نمی کند، بلکه خود آرایه را درج می کند.

push() و pop() -روش هایی که به آرایه ها اجازه می دهد به عنوان پشته استفاده شوند. متد push() عناصر جدیدی را به انتهای آرایه اضافه می کند و طول جدید آرایه را برمی گرداند. متد pop() آخرین عنصر آرایه را حذف می کند و مقدار حذف شده را به عنوان نتیجه برمی گرداند.

هر دو روش آرایه اصلی را اصلاح می کنند. هنگامی که از ترکیبی از متدهای push() و pop() در جاوا اسکریپت در کد خود استفاده می کنید، می توانید از یک آرایه برای ایجاد یک پشته با قانون سرویس first-in و last-out استفاده کنید.

var stack = ; // پشته خالی

stack.push(1,2); // آرایه: 2 را برمی گرداند

پشته. ترکیدن()؛ // آرایه: 2 را برمی گرداند

stack.push(3); // آرایه: 2 را برمی گرداند

stack.pop(); // آرایه: 3 را برمی گرداند

stack.push(); // آرایه: ] 2 را برمی گرداند

پشته. pop() // آرایه: باز خواهد گشت

پشته. ترکیدن()؛ // آرایه: 1 را برمی گرداند

unshift() و shift() -متدهایی که تقریباً مانند push() و pop() کار می کنند، اما عناصر را نه در انتهای آرایه، بلکه در ابتدا درج و حذف می کنند.

متد unshift() یک یا چند عنصر را به ابتدای آرایه اضافه می کند و عناصر را به انتهای آرایه منتقل می کند و طول جدید آرایه را برمی گرداند. متد shift() برای حذف اولین عنصر آرایه استفاده می شود و عنصر حذف شده را برمی گرداند.

var arr = ; // arr:

arr.unshift(1); // arr: 1 برمی گردد

arr.unshift(22); // arr: 2 برمی گردد

arr.shift(); // arr: 22 برمی گردد

arr.unshift(3,); // arr:,1] 3 را برمی گرداند

arr.shift(); // arr:[,1] 3 را برمی گرداند

arr.shift(); // arr: بازخواهد گشت

arr.shift(); // arr: 1 برمی گردد

هنگام فراخوانی متد ()unshift با چندین آرگومان، آن آرگومان‌ها به‌طور هم‌زمان درج می‌شوند، نه یکی در یک زمان، همانطور که در متد splice() اتفاق می‌افتد. یعنی در آرایه نهایی، مقادیر به همان ترتیبی که در لیست آرگومان نوشته شده بودند، در هنگام فراخوانی متد مرتب می شوند.

toString() و toLocaleString()- متدهایی که هر یک از عناصر آرایه را به یک رشته تبدیل می کنند و لیستی از رشته های دریافتی را که با کاما از هم جدا شده اند نمایش می دهند. روش toString() همانطور که قبلا ذکر شد برای هر شیء در جاوا اسکریپت از جمله یک آرایه در دسترس است. لطفاً توجه داشته باشید که در نتیجه عملکرد روش‌ها، نه براکت مربع و نه هیچ جداکننده دیگری در اطراف مقادیر آرایه باقی نمی‌ماند.

ToString() // "1،2،3" را برمی گرداند.

["a"، "b"، "c"].toString() // "a,b,c" را برمی گرداند.

].toString() // "1,2,s" را برمی گرداند.

متد ()toString همان رشته را برمی گرداند که متد join() بدون پارامتر فراخوانی شود.

()toLocaleString روشی است که در آن رشته‌های حاصل با استفاده از یک جداکننده منطقه خاص به هم متصل می‌شوند.

مثال 1. ایجاد یک بنر چرخه ای (نمایش اسلاید).

بیایید آرایه ای از تصاویر ایجاد کنیم که در فواصل زمانی مشخص در صفحه ظاهر می شوند.

تغییر تصویر

مثال 2. نمایش یک قصار تصادفی در یک صفحه. هر بار که صفحه به‌روزرسانی می‌شود، یک قصیده تصادفی ظاهر می‌شود.

کلمات قصار تصادفی در صفحه

شی تاریخ

AT شی جاوا اسکریپتتاریخ برای کار با مقادیر تاریخ و زمان طراحی شده است. یک نمونه شی توسط سازنده Date() با استفاده از عملگر جدید ایجاد می شود.

var new_day = new Date();/* نمونه ای از یک شی ایجاد شده است که اطلاعات مربوط به زمان و تاریخ فعلی را ذخیره می کند (زمان سیستم رایانه را می خواند). */

var Christmas = new Date(2016, 11, 25);/* نمونه ای از یک شی با تاریخ کریسمس ایجاد می شود. اعداد ماه بر اساس صفر هستند، بنابراین دسامبر 11 شماره گذاری شده است */

متدهای تعریف شده در شیء Date() به شما امکان می دهد زمان ها و تاریخ های مختلف را تنظیم و ذخیره کنید و یک سری اقدامات را با استفاده از زمان محلی یا زمان گرینویچ (GMT) روی آنها انجام دهید.

Christmas.setFullYear(xmas.getFullYear() + 1);/* تاریخ کریسمس سال آینده */

var weekday = Christmas.getDay();// روز هفته کریسمس.

document.write("Today: " + new_day.toLocaleString());// مقدار رشته تاریخ و زمان فعلی.

جاوا اسکریپت توابعی را برای شی ()Date تعریف می کند (از طریق شی Date() فراخوانی نمی شود، بنابراین نه متدها، بلکه توابع) برای تبدیل تاریخ، که به عنوان عدد یا رشته داده می شود، به یک نمایش داخلی در میلی ثانیه که در برخی عملیات استفاده می شود. با خرما

سازنده هنگام ایجاد یک نمونه جدید از شی Date() می تواند در آن استفاده شود گزینه های زیر:

new Date();/* سازنده Date() بدون آرگومان، یک شی ایجاد می کند که مقدار آن برابر با تاریخ و زمان فعلی است. */

تاریخ جدید (تعداد_میلی ثانیه)؛/* یک مقدار عددی منفرد در سازنده مشخص شده است و به عنوان نمایش میلی ثانیه ای تاریخ استفاده می شود که همان مقداری است که توسط متد getTime() برگردانده شده است.*/

تاریخ جدید (تاریخ_رشته_نمایش)؛/* اگر یک آرگومان رشته ای به سازنده داده شود، به عنوان نمایش رشته ای از تاریخ در قالبی که متد Date.parse() می پذیرد، در نظر گرفته می شود. */

تاریخ جدید (سال، ماه، روز، ساعت، دقیقه، ثانیه، میلی ثانیه)؛/* سازنده را می توان دو تا هفت آرگومان عددی ارسال کرد که فیلدهای جداگانه تاریخ و زمان را مشخص می کند. به غیر از دو فیلد اول که سال و ماه را مشخص می کنند، همه آرگومان های دیگر اختیاری هستند. */

Date() را می توان به عنوان یک تابع، بدون عملگر جدید فراخوانی کرد. در این مورد، هر آرگومان ارسال شده نادیده گرفته می شود، برمی گردد تاریخ فعلیو زمان.

بیایید مشخص کنیم که آرگومان ها هنگام استفاده از اشکال مختلف سازنده چه مقادیری می توانند داشته باشند:

num_milliseconds تعداد میلی‌ثانیه‌های بین تاریخ مورد نظر و نیمه‌شب، 01 ژانویه 1970 (UTC) است. فرض کنید اگر آرگومان 5000 باشد، تاریخی ایجاد می شود که پنج ثانیه پس از نیمه شب در 01/01/1970 است.

date_string_representation - آرگومان تاریخ و زمان اختیاری را به عنوان رشته مشخص می کند. رشته باید در قالبی باشد که متد Date.parse() آن را بفهمد.

سال - چهار رقم سال. برای سازگاری با پیاده سازی های قبلی جاوا اسکریپت، اگر مقدار آرگومان بین 0 تا 99 باشد، عدد 1900 به مقدار آن اضافه می شود.

روز یک عدد صحیح از 1 تا 31 است که نشان دهنده روز ماه است. استدلال اختیاری است.

ساعت یک عدد صحیح از 0 است که به معنی نیمه شب تا 23 است. آرگومان اختیاری است.

دقیقه یک عدد صحیح از 0 تا 59 است. آرگومان اختیاری است.

ثانیه ثانیه در دقیقه، به عنوان یک عدد صحیح از 0 تا 59 مشخص شده است. آرگومان اختیاری.

میلی ثانیه تعداد میلی ثانیه هایی است که به عنوان یک عدد صحیح بین 0 تا 999 مشخص شده است. آرگومان اختیاری است.

آخرین به روز رسانی: 04/09/2018

آرایه ها برای کار با مجموعه داده ها طراحی شده اند. عبارت new Array() برای ایجاد یک آرایه استفاده می شود:

var myArray = new Array();

همچنین راه کوتاه تری برای مقداردهی اولیه آرایه وجود دارد:

Var myArray = ;

در این حالت یک آرایه خالی ایجاد می کنیم. اما می توانید داده های اولیه را نیز به آن اضافه کنید:

Var people = ["تام"، "آلیس"، "سم"]; ورود به سیستم کنسول (افراد);

در این حالت آرایه myArray دارای سه عنصر خواهد بود. از نظر گرافیکی می توان آن را به صورت زیر نشان داد:

ایندکس ها برای دسترسی به عناصر آرایه جداگانه استفاده می شوند. شمارش از صفر شروع می شود، یعنی اولین عنصر دارای شاخص 0 و آخرین عنصر دارای شاخص 2 خواهد بود:

Var people = ["تام"، "آلیس"، "سم"]; ورود به سیستم کنسول (افراد)؛ // Tom var person3 = مردم; // Sam console.log(person3); // سام

اگر بخواهیم به عنصری با شاخصی بزرگتر از اندازه آرایه دسترسی پیدا کنیم، تعریف نشده خواهیم داشت:

Var people = ["تام"، "آلیس"، "سم"]; ورود به سیستم کنسول (افراد); // تعریف نشده

همچنین، با شاخص، مقادیر برای عناصر آرایه تنظیم می شود:

Var people = ["تام"، "آلیس"، "سم"]; ورود به سیستم کنسول (افراد)؛ // تام مردم = "باب"; ورود به سیستم کنسول (افراد)؛ // باب

علاوه بر این، بر خلاف زبان های دیگر، مانند C# یا جاوا، می توانید عنصری را نصب کنید که در ابتدا نصب نشده است:

Var people = ["تام"، "آلیس"، "سم"]; ورود به سیستم کنسول (افراد)؛ // undefined - فقط سه عنصر در آرایه وجود دارد people = "Bob"; ورود به سیستم کنسول (افراد)؛ // باب

همچنین شایان ذکر است که برخلاف تعدادی از زبان‌های برنامه‌نویسی، آرایه‌های جاوا اسکریپت به شدت تایپ نمی‌شوند، یک آرایه می‌تواند داده‌های انواع مختلف را ذخیره کند:

Var objects = ["Tom", 12, true, 3.14, false]; ورود به سیستم کنسول (اشیاء)؛

اپراتور گسترش

عملگر spread ... به شما امکان می دهد مقادیر را از یک آرایه به صورت جداگانه بگیرید:

اجازه دهید اعداد = ; ورود به سیستم کنسول (... اعداد); // 1 2 3 4 console.log(numbers); //

عملگر spread قبل از آرایه قرار می گیرد. در نتیجه عبارت...numbers مجموعه ای از اعداد را برمی گرداند، اما یک آرایه نیست، بلکه مقادیر فردی خواهد بود.

آرایه های چند بعدی

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

var numbers1 = ; // آرایه تک بعدی var numbers2 = [, ]; // آرایه دو بعدی

به صورت بصری، هر دو آرایه را می توان به صورت زیر نشان داد:

اعداد آرایه یک بعدی 1

برای به دست آوردن یک عنصر مجزا از یک آرایه، از یک شاخص نیز استفاده می شود:

Var tomInfo = مردم;

فقط اکنون متغیر tomInfo یک آرایه را نشان خواهد داد. برای بدست آوردن یک عنصر در داخل یک آرایه تو در تو، باید از بعد دوم آن استفاده کنیم:

Console.log("Name:" + people); // Tom console.log("سن: " + افراد); // 25

یعنی اگر بتوانیم به صورت بصری یک آرایه دو بعدی را به عنوان جدول نمایش دهیم، عنصر افراد به سلول جدول واقع در تقاطع سطر اول و ستون دوم اشاره خواهد کرد (بعد اول 0 است - ردیف دوم است. بعد - 1 - ستون).

ما همچنین می توانیم یک تکلیف انجام دهیم:

Var people = [ ["تام"، 25، نادرست]، ["بیل"، 38، درست]، ["آلیس"، 21، نادرست] ]; نفر = 56; // یک مقدار جداگانه اختصاص دهید console.log(people); // 56 نفر = ["باب"، 29، نادرست]; // یک آرایه اختصاص دهید console.log(people); // باب

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

varnumbers = ; اعداد = ; // اکنون اعداد یک آرایه دوبعدی است اعداد=; // اکنون اعداد یک آرایه سه بعدی است اعداد = 5; // اولین عنصر آرایه سه بعدی 5 console.log(numbers) است.

  • I. تکرار روی آرایه های واقعی
    1. برای هر روش و روش های مرتبط
    2. برای حلقه
    3. استفاده صحیح از حلقه for...in
    4. برای...از حلقه (استفاده ضمنی از تکرار کننده)
    5. استفاده صریح از تکرار کننده
    1. استفاده از روش های تکرار آرایه واقعی
    2. تبدیل به آرایه واقعی
    3. یادداشتی در مورد اشیاء زمان اجرا

I. تکرار روی آرایه های واقعی

در این لحظهسه راه برای تکرار روی عناصر یک آرایه واقعی وجود دارد:
  1. روش Array.prototype.forEach ;
  2. کلاسیک برای حلقه;
  3. یک "خوب شکل گرفته" for...in loop.
علاوه بر این، به زودی، با ظهور استاندارد جدید ECMAScript 6 (ES 6)، دو روش دیگر انتظار می رود:
  1. برای...از حلقه (استفاده ضمنی از تکرار کننده)؛
  2. استفاده صریح از تکرار کننده

1. متد forEach و متدهای مرتبط

اگر پروژه شما برای پشتیبانی از ویژگی های استاندارد ECMAScript 5 (ES5) طراحی شده است، می توانید از یکی از نوآوری های آن استفاده کنید - روش forEach.

مثال استفاده:
var a = ["a"، "b"، "c"]; a.forEach(function(entry) (consol.log(entry); ));
به طور کلی، استفاده از forEach نیازمند گنجاندن کتابخانه شبیه‌سازی es5-shim برای مرورگرهایی است که از این روش پشتیبانی نمی‌کنند. اینها شامل IE 8 و نسخه های قبلی است که هنوز در برخی مکان ها استفاده می شود.

مزیت forEach این است که نیازی به اعلام متغیرهای محلی برای ذخیره شاخص و مقدار عنصر آرایه فعلی نیست، زیرا آنها به طور خودکار به تابع ارسال می شوند. پاسخ به تماس(بازخوانی) به عنوان استدلال.

اگر نگران هزینه احتمالی تماس برگشتی برای هر عنصر هستید، نگران نباشید و این را بخوانید.

ForEach برای تکرار روی تمام عناصر یک آرایه طراحی شده است، اما علاوه بر آن، ES5 چندین روش مفید دیگر را برای تکرار روی همه یا برخی از عناصر به علاوه انجام کاری با آنها ارائه می‌کند:

  • هر - true را برمی گرداند اگر برای هر عنصر آرایه، callback مقداری را برمی گرداند که به true ارزیابی می شود.
  • some - true را برمی گرداند اگر حداقل برای یک عنصر از آرایه، callback مقداری را برمی گرداند که به true ارزیابی می شود.
  • فیلتر - یک آرایه جدید حاوی عناصر آرایه اصلی ایجاد می کند که برای آن callback true را برمی گرداند.
  • نقشه - یک آرایه جدید متشکل از مقادیر بازگردانده شده توسط callback ایجاد می کند.
  • کاهش - یک آرایه را با اعمال فراخوانی به هر عنصر آرایه به نوبه خود، با شروع از اولی، به یک مقدار کاهش می دهد (می تواند برای محاسبه مجموع عناصر آرایه و سایر توابع خلاصه مفید باشد).
  • reduceRight - شبیه به کاهش کار می کند، اما روی عناصر به ترتیب معکوس تکرار می شود.

2. حلقه for

خوب قدیمی برای سنگ:

Var a = ["a"، "b"، "c"]; شاخص var; برای (شاخص = 0؛ شاخص< a.length; ++index) { console.log(a); }
اگر طول آرایه در سراسر حلقه تغییر نکند، و خود حلقه متعلق به یک قطعه کد حیاتی برای عملکرد است (که بعید است)، پس می‌توانید از نسخه «بهینه‌تر» for با ذخیره‌سازی طول آرایه استفاده کنید:

Var a = ["a"، "b"، "c"]; var index, len; برای (index = 0, len = a.length; index< len; ++index) { console.log(a); }
در تئوری، این کد باید کمی سریعتر از کد قبلی اجرا شود.

اگر ترتیب تکرار عناصر مهم نیست، می توانید از نظر بهینه سازی از این هم فراتر رفته و با معکوس کردن ترتیب تکرار، از شر متغیر ذخیره طول آرایه خلاص شوید:

Var a = ["a"، "b"، "c"]; شاخص var; برای (index = a.length - 1; index >= 0; --index) (consol.log(a)؛ )
با این حال، در مدرن موتورهای جاوا اسکریپتبازی های بهینه سازی مانند این معمولاً هیچ معنایی ندارند.

3. استفاده صحیح از حلقه for...in

اگر به شما توصیه می شود از حلقه for...in استفاده کنید، به یاد داشته باشید که تکرار روی آرایه ها چیزی نیست که برای آن در نظر گرفته شده است. برخلاف تصور غلط رایج، حلقه for...in روی شاخص‌های آرایه تکرار نمی‌شود، بلکه ویژگی‌های قابل شمارش شیء را تکرار می‌کند.

با این حال، در برخی موارد، مانند تکرار روی آرایه‌های پراکنده، for...in می‌تواند مفید باشد، به شرطی که اقدامات احتیاطی را انجام دهید، همانطور که در مثال زیر نشان داده شده است:

// a - آرایه پراکنده var a = ; a = "a"; a = "b"؛ a = "c"؛ برای (کلید var در a) (اگر (a.hasOwnProperty(کلید) && /^0$|^\d*$/.test(کلید) && کلید<= 4294967294) { console.log(a); } }
در این مثال، دو بررسی روی هر تکرار حلقه انجام می‌شود:

  1. که آرایه دارای ویژگی خاص خود به نام key است (از نمونه اولیه آن به ارث برده نشده است).
  2. آن کلید رشته ای است حاوی نماد اعشاری یک عدد صحیح که مقدار آن کمتر از 4294967294 است. آخرین عدد از کجا می آید؟ از تعریف شاخص آرایه در ES5، که به این معنی است که بالاترین شاخصی که یک عنصر در یک آرایه می تواند داشته باشد (2^32 - 2) = 4294967294 است.
البته چنین بررسی هایی هنگام اجرای حلقه زمان بیشتری می برد. اما در مورد یک آرایه پراکنده، این روش کارآمدتر از حلقه for است، زیرا در این حالت فقط آن دسته از عناصری که به صراحت در آرایه تعریف شده اند، تکرار می شوند. بنابراین، در مثال بالا، تنها 3 تکرار (برای شاخص های 0، 10 و 10000) انجام می شود - در مقابل 10001 در حلقه for.

برای اینکه هر بار که نیاز به تکرار روی یک آرایه دارید، چنین کد بررسی دست و پا گیر ننویسید، می توانید آن را به عنوان یک تابع جداگانه بنویسید:

تابع arrayHasOwnIndex(آرایه، کلید) (بازگرداندن array.hasOwnProperty(کلید) && /^0$|^\d*$/.test(کلید) && کلید<= 4294967294; }
سپس بدنه حلقه از مثال به طور قابل توجهی کاهش می یابد:

برای (کلید در a) ( if (arrayHasOwnIndex(a، کلید)) (consol.log(a); ))
کد چک های در نظر گرفته شده در بالا جهانی است و برای همه موارد مناسب است. اما به جای آن، می توانید از یک نسخه کوتاه تر استفاده کنید، اگرچه به طور رسمی کاملا صحیح نیست، اما، با این وجود، برای اکثر موارد مناسب است:

برای (کلید در a) ( if (a.hasOwnProperty(key) && String(parseInt(key, 10)) === کلید) (consol.log(a); ))

4. حلقه for...of (استفاده ضمنی از یک تکرار کننده)

ES6، در حالی که هنوز در وضعیت پیش نویس است، باید تکرار کننده ها را به جاوا اسکریپت وارد کند.

اشاره گر یک پروتکل پیاده سازی شده توسط شی است که یک روش استاندارد برای به دست آوردن دنباله ای از مقادیر (محدود یا نامحدود) را تعریف می کند.
یک iterator یک شی است که متد ()next را تعریف می کند، تابعی بدون آرگومان که یک شی را با دو ویژگی برمی گرداند:

  1. انجام شده (بولی) - درست است اگر تکرار کننده به پایان دنباله قابل تکرار رسیده باشد. در غیر این صورت نادرست است.
  2. value - مقدار بازگشتی توسط تکرار کننده را مشخص می کند. اگر ویژگی done روی true تنظیم شود، ممکن است تعریف نشده باشد (از دست رفته).
بسیاری از اشیاء داخلی، از جمله. آرایه های واقعی به طور پیش فرض دارای تکرار کننده هستند. ساده ترین راه برای استفاده از تکرار کننده در آرایه های واقعی استفاده از new for...of construct است.

نمونه ای از استفاده برای...از:

وروال; var a = ["a"، "b"، "c"]; برای (val of a) (consol.log(val);)
در مثال بالا، حلقه for...of به طور ضمنی یک تکرار کننده شی Array را برای دریافت هر مقدار در آرایه فراخوانی می کند.

5. استفاده صریح از تکرار کننده

تکرار کننده ها نیز می توانند به طور صریح استفاده شوند، اگرچه در این مورد کد در مقایسه با حلقه for...of بسیار پیچیده تر می شود. چیزی شبیه این به نظر می رسد:

Var a = ["a"، "b"، "c"]; var it = a.entries(); ورود var; while (!(entry = it.next()).انجام شد) (consol.log(entry.value); )
در این مثال، روش Array.prototype.entries یک تکرار کننده را برمی گرداند که برای نمایش مقادیر آرایه استفاده می شود. در هر تکرار، entry.value حاوی آرایه ای به شکل [key, value] است.

II. تکرار بر روی اشیاء آرایه مانند

علاوه بر آرایه های واقعی، جاوا اسکریپت نیز دارد اشیاء آرایه مانند . وجه اشتراک آنها با آرایه های واقعی این است که دارای ویژگی طول و ویژگی هایی با نام هایی به شکل اعداد هستند که با عناصر آرایه مطابقت دارند. به عنوان مثال می توان به DOM مجموعه NodeList و آرایه های شبه آرگومان های موجود در هر تابع/روش اشاره کرد.

1. استفاده از روش هایی برای تکرار روی آرایه های واقعی

حداقل بیشتر، اگر نه همه، روش‌ها برای تکرار روی آرایه‌های واقعی می‌توانند برای تکرار روی اشیاء آرایه‌مانند استفاده شوند.

سازه‌های for و for...in می‌توانند دقیقاً مانند آرایه‌های واقعی روی اشیاء آرایه‌مانند اعمال شوند.

روش های ForEach و دیگر روش های Array.prototype نیز برای اشیاء آرایه مانند اعمال می شود. برای انجام این کار، باید از یک تماس Function.call یا Function.apply استفاده کنید.

به عنوان مثال، اگر می خواهید forEach را به ویژگی childNodes یک شی Node اعمال کنید، این کار را به صورت زیر انجام می دهید:

Array.prototype.forEach.call(node.childNodes, function(child) ( // انجام کاری با شی فرزند));
برای سهولت استفاده مجدد از این تکنیک، می توانید ارجاع به متد Array.prototype.forEach را در یک متغیر جداگانه اعلام کنید و از آن به عنوان مختصر استفاده کنید:

// (با فرض اینکه همه کدهای زیر در یک محدوده باشند) var forEach = Array.prototype.forEach; // ... forEach.call(node.childNodes, function(child) ( // انجام کاری با شی فرزند));
اگر یک شی آرایه مانند دارای یک تکرار کننده باشد، می توان از آن به طور صریح یا ضمنی برای تکرار روی شی به همان روشی که برای آرایه های واقعی استفاده می شود استفاده کرد.

2. تبدیل به آرایه واقعی

همچنین یک راه بسیار ساده دیگر برای تکرار روی یک شی آرایه مانند وجود دارد: آن را به یک آرایه واقعی تبدیل کنید و از هر یک از روش های مورد بحث در بالا برای تکرار روی آرایه های واقعی استفاده کنید. برای تبدیل، می توانید از روش عمومی Array.prototype.slice استفاده کنید، که می تواند برای هر شیء آرایه مانند اعمال شود. این کار بسیار ساده انجام می شود، همانطور که در مثال زیر نشان داده شده است:

Var trueArray = Array.prototype.slice.call(arrayLikeObject, 0);
به عنوان مثال، اگر می خواهید یک مجموعه NodeList را به یک آرایه واقعی تبدیل کنید، به کدی مانند زیر نیاز دارید:

Vardivs = Array.prototype.slice.call(document.querySelectorAll("div"), 0);
به روز رسانی: همانطور که در نظرات rock and torbasow اشاره شد، در ES6 می توانید از روش توصیفی تر Array.from به جای Array.prototype.slice استفاده کنید.

3. نکته در مورد اشیاء زمان اجرا

اگر روش‌های Array.prototype را برای اشیاء زمان اجرا (مانند مجموعه‌های DOM) اعمال می‌کنید، باید توجه داشته باشید که این روش‌ها در تمام زمان‌های اجرا (از جمله مرورگرها) تضمین نمی‌شوند که به درستی کار کنند. این به رفتار یک شی خاص در یک زمان اجرا خاص بستگی دارد، به طور دقیق تر، به نحوه پیاده سازی عملیات انتزاعی HasProperty در آن شی بستگی دارد. مشکل این است که خود استاندارد ES5 امکان رفتار نادرست یک شی را با توجه به این عملیات فراهم می کند (به §8.6.2 مراجعه کنید).

بنابراین، آزمایش عملکرد متدهای Array.prototype در هر زمان اجرا (مرورگر) که قصد استفاده از برنامه خود را دارید، مهم است.

درود به همه کسانی که به موضوعی مانند آرایه های چند بعدی جاوا اسکریپت و مرتب سازی علاقه مند هستند. در نشریه فعلی، سعی خواهم کرد این موضوع را با تمام جزئیات پوشش دهم.

بنابراین پس از مطالعه مقاله متوجه خواهید شد که چرا از آرایه های چند بعدی در برنامه های کاربردی وب استفاده می شود، چگونه ایجاد می شوند و چگونه می توان آنها را مدیریت و مرتب کرد. بیایید شروع به یادگیری کنیم!

آرایه های چند بعدی چگونه ایجاد می شوند و برای چیست؟

برای شروع، شایان ذکر است که چگونه یک آرایه یک بعدی منظم ایجاد می شود.

آرایه =

حال به یاد داشته باشید که یک آرایه چند بعدی آرایه ای از آرایه ها است.موافقم، به نظر یک توتولوژی است. با این حال، تعریف را دوباره بخوانید. در واقع، یک آرایه چند بعدی از تعداد معینی تودرتو تشکیل شده است.

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

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

همه چیز به این شکل خواهد بود:

var results = [ ["مارکوس"، 333]، ["ناتاشا"، 211]، ["الکس"، 124] ];

همانطور که می بینید، اطلاعات را می توان به صورت ناهمگن ذخیره کرد. این می تواند رشته، اعداد و زوج باشد. این امکان پذیر است زیرا آرایه های در تایپ نشده اند.

در این حالت دسترسی به عناصر از طریق یک اپراتور دوگانه صورت می گیرد.

برای ادغام مطالب، یک برنامه کوچک را تجزیه و تحلیل کنید.

ارزش نتایج =

آرایه ها وسیله ای نسبتاً مناسب برای ذخیره داده های پیچیده مرتب شده در طول پردازش هستند. علاوه بر این، کار با آنها بسیار راحت است و در عین حال سرعت پردازش آنها نیز بسیار بالا است.

راه های مرتب سازی داده ها

جاوا اسکریپت یک متد داخلی برای آرایه ها دارد که به آن می گویند مرتب سازی(). این ابزار بسیار انعطاف پذیر است. و حالا دلیلش را توضیح خواهم داد.

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

الکسی، 124

مارکوس، 333

ناتاشا، 211

و اگر عناصر را در هر آرایه تودرتو با هم عوض کنید، دریافت خواهید کرد:

124، الکسی

211، ناتاشا

333، مارکوس

در این حالت، برای مقایسه، تمام عناصر به طور موقت به رشته تبدیل می شوند.

اگر برای حل یک مشکل خاص، به تابعی نیاز دارید که عناصر را به روشی غیر استاندارد مرتب می کند، می توانید آن را خودتان بنویسید و به عنوان یک پارامتر به آن ارسال کنید. مرتب سازی(). در این مورد، شایان ذکر است که تابع تعریف شده توسط کاربر باید برگردد:

  • یک عدد مثبت (به طور کلی 1 را انتخاب کنید) اگر اولین عنصر مشخص شده در هنگام مقایسه از عنصر دوم پیروی کند.
  • یک عدد منفی (معمولا -1) اگر دومین عنصر انتخاب شده باید از عنصر اول پیروی کند.
  • اگر دو مقدار مورد آزمایش برابر باشند، null است.

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

در گزینه اول منطق مرتب سازی را تغییر دادم، i.e. در شرایطی که لازم است یک عدد مثبت برگردانم، یک عدد منفی را برمی گردانم و بالعکس.

جدول ثبت:

اما در روش دوم، من منطق مرتب سازی را دست نخورده رها کردم، اما از یک روش اضافی استفاده کردم - معکوس(). همانطور که از نام آن پیداست، معکوس ترتیب عناصر را معکوس می کند.

بنابراین تابع sort() به شکل زیر خواهد بود:

1 2 3 4 5 تابع RecordSort(a, b) (اگر (a > b) 1 را برمی گرداند؛ در غیر این صورت اگر (a< b) return -1; else return 0; }

تابع RecordSort(a, b) (اگر (a > b) 1 را برمی گرداند؛ در غیر این صورت اگر (a< b) return -1; else return 0; }

و بعد از آن روش بالا را اضافه کنید.

نتیجه گیری به روشی مشابه انجام می شود.

می خواهم توجه شما را به یک نکته مهم جلب کنم. هنگام استفاده از این توابع، تمام تغییرات در آرایه ای که آنها را اعمال می کنید، رخ می دهد. بنابراین، اگر نیاز به حفظ فرم اصلی داده ها دارید، یک کپی ایجاد کنید و سپس آن را ویرایش کنید.

خوب، بنابراین من در مورد آرایه های چند بعدی و مرتب سازی آنها صحبت کردم. اگر مقاله را دوست داشتید، در وبلاگ مشترک شوید و سایر نشریات به همان اندازه جالب را بخوانید. برای بازنشرها سپاسگزار خواهم بود. به زودی میبینمت!

خداحافظ!

با احترام، رومن چوشوف

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

var fruits = ["سیب"، "پرتقال"، "خر"]

برای استخراج یک عنصر، شاخص آن را در پرانتز قرار دهید. شاخص اول 0:

var fruits = ["سیب"، "پرتقال"، "خر"] هشدار(میوه ها) هشدار(میوه ها) هشدار(میوه ها)

همچنین می توانیم طول یک آرایه جاوا اسکریپت را بدست آوریم:

var fruits = ["سیب"، "پرتقال"، "خر"] هشدار(fruits.length)

اوه! ما آرایه ای با دو میوه و یک الاغ ایجاد کرده ایم. حالا باید خر را برداریم.

روش های پاپ و فشار

متد pop در جاوا اسکریپت یک عنصر آرایه را حذف کرده و آن را برمی گرداند.

مثال زیر نشان می دهد که چگونه "Donkey" از یک آرایه بازیابی می شود:

var fruits = ["Apple", "Orange", "Donkey"] alert("I'm deleting "+fruits.pop()) // اکنون فقط هشدار ["Apple","Orange"] را داریم("Now اندازه آرایه: "+fruits.length) // خر حذف شد

توجه داشته باشید که pop خود آرایه را تغییر می دهد.

همتای Pop روش فشاری است که یک عنصر را به آرایه اضافه می کند. به عنوان مثال، ما فراموش کردیم یک هلو اضافه کنیم:

var fruits = ["سیب"، "پرتقال"] fruits.push("هلو"); // اکنون ما هشدار ["سیب"، "نارنجی"، "هلو"] داریم ("آخرین مورد:" + میوه ها)

  1. ایجاد یک سبک آرایه با عناصر " جاز”, “بلوز”;
  2. افزودن ارزش " راک اند رول«;
  3. مقدار دوم را از انتها با مقدار " جایگزین کنید کلاسیک". شما باید با یک آرایه خاتمه دهید: جاز”, ”کلاسیک”, ”راک اند رول". کد باید برای هر طول آرایه ای کار کند.
  4. آخرین مقدار را از آرایه استخراج کرده و از طریق هشدار نمایش دهید.

راه حل

// 1 var styles = ["Jazz", "Bluez"] // 2 styles.push("Rock"n"Roll") // or: styles = "Rock"n"Roll" // 3 styles = "Classic" " // 4 هشدار(styles.pop())

روش‌های شیفت/لغو تغییر

روش‌های shift/unshift از انتهای آرایه کار می‌کنند، اما می‌توانید از shift برای انتقال عناصر به بالا نیز استفاده کنید ( اولین مقدار آرایه با تغییر عنصر حذف می شود). متد unshift به جاوا اسکریپت اجازه می دهد تا یک عنصر را از انتها به آرایه اضافه کند:

var fruits = ["سیب"، "پرتقال"] var apple = fruits.shift() // اکنون فقط ["نارنجی"] fruits.unshift("لیمو") // اکنون ["لیمو"، " نارنجی"] هشدار(میوه ها. طول) // 2

هم Shift و هم unshift می توانند روی چندین عنصر به طور همزمان کار کنند:

var fruits = ["سیب"] fruits.push("نارنجی"،"هلو") fruits.unshift("آناناس","لیمو") // آرایه اکنون به این شکل است: ["آناناس"، "لیمو"، " سیب "، "نارنجی"، "هلو"]

وظیفه برای خودشکوفایی

کدی بنویسید تا یک مقدار تصادفی از آرایه آرایه هشدار دهد:

var arr = ["آلو"، "نارنجی"، "خر"، "هویج"، "جاوا اسکریپت"]

نکته: کد به دست آوردن یک عدد تصادفی از حداقل به حداکثر مقدار (شامل) به شرح زیر است:

var rand = min + Math.floor(Math.random()*(max+1-min))

راه حل

ما باید یک عدد تصادفی بین 0 و arr.length-1 (شامل) استخراج کنیم:

var arr = ["آلو"،"پرتقال"،"خر"،"هویج"،"جاوااسکریپت"] var rand = Math.floor(Math.random()*arr.length) alert(arr)

تکرار روی یک آرایه

در جاوا اسکریپت، تکرار روی یک آرایه با یک حلقه for انجام می شود:

var fruits = ["آناناس"، "لیمو"، "سیب"، "پرتقال"، "هلو"] for(var i=0; i

وظیفه برای خودشکوفایی

یک تابع find(arr,value) ایجاد کنید که مقداری را در یک آرایه مشخص پیدا کرده و شاخص آن را برمی گرداند، یا اگر مقداری پیدا نشد -1 را برمی گرداند.

مثلا:

arr = [ "test", 2, 1.5, false ] find(arr, "test") // 0 find(arr, 2) // 1 find(arr, 1.5) // 2 find(arr, 0) // -یک

راه حل

یک راه حل ممکن ممکن است به شکل زیر باشد:

تابع find(آرایه، مقدار) (برای(var i=0; i

اما این درست نیست زیرا == تفاوت بین 0 و false را تعریف نمی کند.

هنگام کار با آرایه ها در جاوا اسکریپت استفاده از === صحیح تر است. علاوه بر این، آخرین استاندارد ES5 حاوی تابع Array#indexOf است. با آن می توانیم تابعی مانند این تعریف کنیم:

تابع find(array, value) (if (array.indexOf) array.indexOf(value) for(var i=0; i)

حتی هوشمندانه تر این است که Find را از طریق یک شرط برای بررسی وجود متد indexOf تعریف کنیم.

وظیفه برای خودشکوفایی

یک تابع filterNumeric(arr) ایجاد کنید که یک آرایه را می گیرد و یک آرایه جدید که فقط حاوی مقادیر عددی از arr است را برمی گرداند.

نمونه ای از اینکه چگونه باید کار کند:

arr = ["a"، 1، "b"، 2]; arr = filterNumeric(arr); // اکنون arr =

راه حل

راه حل این است که روی آرایه تکرار کنید و مقادیر را در صورت عددی بودن به آرایه جدید اضافه کنید.

بپیوندید و تقسیم کنید

گاهی اوقات برای تبدیل آرایه جاوا اسکریپت به رشته به یک راه سریع نیاز دارید. روش join برای همین است.

با استفاده از جداکننده داده شده، یک آرایه را به یک رشته متصل می کند:

var fruits = ["لیمو"،"سیب"،"پرتقال"،"هلو"]; varstr = fruits.join(", "); هشدار(str);

تبدیل معکوس به راحتی با استفاده از روش تقسیم انجام می شود:

var fruits = "سیب، پرتقال، هلو"; vararr = fruits.split(""); // arr اکنون حاوی ["Apple", "Orange", "Peach"] alert(arr);

وظیفه برای خودشکوفایی

شی شامل ویژگی className است که شامل نام کلاس ها است که با فاصله از هم جدا شده اند:

یک تابع addClass(obj, cls) بنویسید که کلاس cls را اضافه می کند، اما فقط در صورتی که وجود نداشته باشد:

ddClass(obj، "new") // obj.className="باز کردن منوی جدید" addClass(obj, "open") // بدون تغییر (کلاس از قبل وجود دارد) addClass(obj، "من") // obj.className= " منوی باز کردن new me" alert(obj.className) //

راه حل

ما باید className و حلقه را به قطعات جدا کنیم. اگر کلاس پیدا نشد، اضافه می شود.

حلقه برای عملکرد کمی بهینه شده است:

تابع addClass(elem، cls) ( for(var c = elem.className.split(" ")، i=c.length-1; i>=0; i--) ( if (c[i] == cls ) return ) elem.className += " "+cls ) var obj = ( className: "open menu" ) addClass(obj, "new") addClass(obj, "open") alert(obj.className) // منوی باز جدید

در مثال بالا، متغیر c در ابتدای حلقه تعریف شده است و آخرین اندیس آن بر روی i تنظیم شده است.

خود حلقه در جهت مخالف پردازش می شود و با شرط i>=0 به پایان می رسد. زیرا چک i>=0 سریعتر از i است. که در جاوا اسکریپت جستجوی آرایه ها را سرعت می بخشد.

استفاده از طول برای برش آرایه

با استفاده از ویژگی length، می توانید یک آرایه را به صورت زیر برش دهید:

طول را تنظیم می کنید و مرورگر آرایه را برش می دهد.

آرایه یک شی است که دلالت دارد

در واقع، در جاوا اسکریپت، یک آرایه یک شی است که با تنظیم طول خودکار و متدهای خاص کامل می شود.

این با مفهوم در زبان های دیگر که در آن آرایه ها بخش پیوسته ای از حافظه هستند متفاوت است. این نیز با یک لیست پیوندی مبتنی بر صف یا پشته متفاوت است.

کلیدهای آرایه غیر عددی

کلیدها اعداد هستند، اما می توانند هر نامی داشته باشند:

arr = arr = 5 arr.prop = 10 // این کار را نکنید

در جاوا اسکریپت، آرایه ها جداول هش هستند، با مزایای عملکردشان، اما همچنین برخی از معایب.

به عنوان مثال، push/pop فقط بر روی خارجی ترین عناصر یک آرایه کار می کند، بنابراین آنها فوق العاده سریع هستند.

فشار فقط با انتها کار می کند:

var arr = ["My", "array"] arr.push("something") alert(arr) // string "array"

متدهای shift/unshift کند هستند زیرا نیاز به شماره گذاری مجدد کل آرایه دارند. روش اسپلایس همچنین می تواند باعث تغییر شماره گذاری شود:

بنابراین Shift/Unshift کندتر از push/pop است. هرچه آرایه بزرگتر باشد، مرتب سازی آرایه در جاوا اسکریپت بیشتر طول می کشد.

وظیفه برای خودشکوفایی

نتیجه چه خواهد شد؟ چرا؟

arr = ["a"، "b"] arr.push(function() ( alert(this) )) arr() // ?

راه حل

از آنجایی که آرایه ها اشیا هستند، arr ..در واقع یک متد فراخوانی به یک شی مانند obj است روش:

arr() // مشابه arr() // از نظر نحوی اشتباه است، اما از نظر مفهومی یکسان است: arr.2() // بازنویسی شده به همان سبک obj.method() this = arr در این مورد به تابع ارسال می شود. بنابراین محتوای arr چاپ می شود. arr = ["a", "b"] arr.push(function() ( alert(this) )) arr() // "a","b",function

آرایه های پراکنده، شرح طول

ویژگی length به شما امکان می دهد اندازه یک آرایه را در جاوا اسکریپت دریافت نکنید، بلکه آخرین شاخص + 1 را دریافت کنید. این مهم در مورد آرایه های پراکنده، با "شکاف" در شاخص ها است.

در مثال زیر، دو عنصر را به میوه های خالی اضافه می کنیم، اما مقدار طول 100 باقی می ماند:

var fruits = // میوه‌های آرایه خالی = میوه‌های "هلو" = هشدار "سیب"(fruits.length) // 100 (اما فقط 2 عنصر در آرایه وجود دارد)

اگر بخواهید یک آرایه پراکنده را خروجی بگیرید، مرورگر مقادیر شاخص های گمشده را به عنوان عناصر خالی برمی گرداند:

var fruits = // میوه های آرایه خالی = میوه های "هلو" = هشدار "سیب"(میوه ها) // ,هلو، سیب (یا چیزی شبیه به آن)

اما آرایه یک شی با دو کلید است. مقادیر از دست رفته فضا را اشغال نمی کنند.

آرایه های پراکنده زمانی که روش های آرایه برای آنها اعمال می شود، رفتار عجیبی دارند. آنها نمی دانند که شاخص ها گم شده اند:

var fruits = fruits = "Peach" fruits = "Apple" alert(fruits.pop()) // pop "Apple" (در index 9) alert(fruits.pop()) // پاپ یک عنصر نامشخص (در نمایه 8) )

سعی کنید از آرایه های پراکنده خودداری کنید. به هر حال، روش های آنها به طور معمول کار نمی کند. در عوض، از Object استفاده کنید.

حذف از یک آرایه

همانطور که می دانیم آرایه ها شی هستند، بنابراین می توانیم از delete برای حذف یک مقدار استفاده کنیم:

var arr = ["Go", "to", "home"] delete arr // now arr = ["Go", undefined, "home"] alert(arr) // تنظیم نشده است

می بینید که مقدار حذف شده است، اما نه به روشی که ما می خواهیم زیرا آرایه حاوی یک عنصر تنظیم نشده است.

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

بیشتر اوقات، ما باید یک عنصر را بدون ایجاد "سوراخ" بین شاخص ها حذف کنیم. روش دیگری وجود دارد که در این مورد به ما کمک می کند.

روش اتصال

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

arr.splice(index, deleteCount[, elem1, ..., elemN])

عنصر deleteCount را که از index شروع می شود حذف می کند و سپس elem1، ...، elemN را به جای خود درج می کند.

بیایید به چند نمونه نگاه کنیم:

var arr = ["Go", "to", "home"] arr.splice(1, 1) // حذف 1 عنصر با شروع index 1 alert(arr.join(")) // ["Go" , "home"] (1 مورد حذف شد)

بنابراین می توانید از splice برای حذف یک عنصر از یک آرایه استفاده کنید. اعداد عناصر آرایه برای پر کردن شکاف جابجا می شوند:

var arr = ["Go", "to", "home"] arr.splice(0, 1) // حذف 1 عنصر با شروع index 0 alert(arr) // "to" اولین عنصر شد

مثال زیر نحوه جایگزینی عناصر را نشان می دهد:

متد splice آرایه ای از عناصر حذف شده را برمی گرداند:

var arr = ["برو"، "به"، "خانه"، "اکنون"]; // حذف 2 عنصر اول var remove = arr.splice(0, 2) alert(removed) // "Go", "to"<-- массив удаленных элементов splice может вставлять элементы, задайте 0 для deleteCount. var arr = ["Go", "to", "home"]; // со второй позиции // удаляем 0 // и вставляем "my", "sweet" arr.splice(2, 0, "my", "sweet") alert(arr) // "Go", "to", "my", "sweet", "home"

این روش همچنین می تواند از یک شاخص منفی استفاده کند که از انتهای آرایه شمارش می شود:

var arr = // برای عنصر -1 (ماقبل آخر) // حذف 0 عنصر، // و درج 3 و 4 arr.splice(-1, 0, 3, 4) alert(arr) // 1,2,3, 4.5

وظیفه برای خودشکوفایی

شی حاوی ویژگی className است که شامل نام کلاس ها است که با فاصله از هم جدا شده اند:

var obj = ( className: "open menu")

یک تابع removeClass(obj,cls) بنویسید که در صورت داده شدن کلاس cls را حذف می کند:

removeClass(obj, "open") // obj.className="menu" removeClass(obj, "blabla") // بدون تغییر (کلاسی برای حذف وجود ندارد)

راه حل

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

بیایید این را کمی بهینه کنیم:

تابع removeClass(elem، cls) ( for(var c = elem.className.split(" ")، i=c.length-1; i>=0; i--) ( if (c[i] == cls ) c.splice(i,1) ) elem.className = c.join(" ") ) var obj = ( className: "open menu" ) removeClass(obj, "open") removeClass(obj, "blabla") هشدار (obj.className) // منو

در مثال بالا، متغیر c در ابتدای حلقه تنظیم شده است و i روی آخرین شاخص آن تنظیم شده است.

خود حلقه در جهت مخالف اجرا می شود و با شرط i>=0 به پایان می رسد. این به این دلیل است که i>=0 سریعتر از i بررسی می شود. که جستجوی اموال را در c سرعت می بخشد.

روش برش

می توانید بخشی از یک آرایه را با استفاده از روش slice(begin[, end]) استخراج کنید: var arr = ["Why", "learn", "JavaScript"]; var arr2 = arr.slice(0,2) // 2 عنصر را می گیرد که از 0 هشدار شروع می شود(arr2.join("")) // "Why, Learn"

توجه داشته باشید که این روش تعداد عناصر آرایه را در جاوا اسکریپت تغییر نمی دهد، بلکه بخشی از آن را کپی می کند.

شما می توانید آرگومان دوم را حذف کنید تا همه عناصر از یک شاخص خاص شروع شوند:

var arr = ["چرا"، "یادگیری"، "جاوا اسکریپت"]; var arr2 = arr.slice(1) // همه عناصر را می پذیرد که با 1 هشدار شروع می شوند(arr2.join("")) // "یادگیری، جاوا اسکریپت"

این روش از شاخص های منفی پشتیبانی می کند، درست مانند String#slice.

روش معکوس

روش مفید دیگر معکوس است. فرض کنید می‌خواهم آخرین قسمت دامنه را دریافت کنم، مانند « com" از جانب " my.site.com". در اینجا نحوه انجام آن آمده است:

var domain = "my.site.com" var last = domain.split(".").reverse() alert(last)

توجه داشته باشید که آرایه های جاوا اسکریپت از یک نحو پیچیده (reverse()) برای فراخوانی یک متد و سپس استخراج یک عنصر از آرایه به دست آمده پشتیبانی می کنند.

می توانید تماس های طولانی تری مانند reverse() ایجاد کنید 0] arr.sort() alert(arr) // 1, 15, 2

کد بالا را اجرا کنید. شما سفارش 1، 15، 2 را دریافت خواهید کرد. این به این دلیل است که این روش همه چیز را به یک رشته تبدیل می کند و به طور پیش فرض از ترتیب واژگانی استفاده می کند.