دسته بندی
دسترسی سریع
آرایه (Array) در جاوا اسکریپت (JavaScript)
آرایه (Array) چیست؟
شیوه های تعریف آرایه در جاوا اسکریپت
روش اول، تعریف آرایه با عبارت Array
روش دوم، تعریف آرایه با کاراکترهای قلاب []
تعریف آرایه های دو یا چندبعدی (Multidimensional)
تعریف آرایه با کلید متنی در جاوا اسکریپت
افزودن یا حذف عنصر آرایه در JavaScript
استفاده از حلقه forEach در آرایه
مثال و پیش نمایش آنلاین
آرایه (Array) چیست؟
شیوه های تعریف آرایه در جاوا اسکریپت
روش اول، تعریف آرایه با عبارت Array
روش دوم، تعریف آرایه با کاراکترهای قلاب []
تعریف آرایه های دو یا چندبعدی (Multidimensional)
تعریف آرایه با کلید متنی در جاوا اسکریپت
افزودن یا حذف عنصر آرایه در JavaScript
استفاده از حلقه forEach در آرایه
مثال و پیش نمایش آنلاین
آرایه (Array) در جاوا اسکریپت (JavaScript)
بحث آرایه ها در زبان های برنامه نویسی و به تبع در زبان جاوا اسکریپت همواره از جمله شیرین ترین و پرکاربردترین مباحث شناخته می شود، معمولا استفاده از آرایه (Array) در هر سطحی از برنامه نویسی اجتناب ناپذیر است و از کدنویسی سورس های ساده تا انجام پروژه های پیشرفته رد پایی از آن دیده می شود، پایه و اساس آرایه ها مبتنی بر تجمیع داده های گروهی و لیست جفتی کلیدها و مقادیر است که برای بررسی، ویرایش و تبدیل عناصر آنها متدها و شیوه نگارش خاصی در مفسر جاوا اسکریپت وجود دارد، شناخت دقیق و تسلط بر نحوه کار این متدها می تواند در درک قابلیت های آرایه بسیار کمک کننده باشد، با ذکر این مقدمه ادامه مباحث آموزش مقدماتی این بخش را به بررسی نحوه تعریف و استفاده از آرایه (Array) در جاوا اسکریپت (JavaScript) اختصاص می دهیم.
آرایه (Array) چیست؟
به زبان ساده آرایه (Array) در برنامه نویسی شکل خاصی از ساختمان داده (Data Structure) به صورت متغیر یا آبجکت است که خود شامل عناصر زیرمجموعه می شود و می توانیم با شماره ایندکس (Index) یا عنوان کلید (Key) به مقادیر (Value) آنها دسترسی داشته باشیم، در اصطلاح برنامه نویسی به هر عضو از آرایه عنصر یا Element، به موقعیت شمارش ترتیبی عناصر Index، به کلیدواژه ای که غیرخودکار تعیین می شود کلید (Key) و به مقادیر آرایه Value گفته می شود.
در شبیه سازی آرایه با زندگی روزمره می توانیم دفترچه تلفنی را در نظر بگیریم که تعدادی صفحه با شماره مشخص داشته و در هر صفحه اطلاعاتی وجود دارد (دفترچه تلفن را آرایه، هر صفحه را یک عضو یا عنصر، شماره صفحات را ایندکس یا کلید و اطلاعات هر صفحه را مقادیر عناصر آرایه حساب می کنیم)، هرچند مقایسه آرایه ها با دنیای واقعی خالی از اشکال نیست اما برای داشتن آشنایی اولیه و با اغماض می توان گفت که ساختار کلی آرایه ها در برنامه نویسی بی شباهت به این مثال نیست، در جاوا اسکریپت هر آرایه یک آبجکت (Array Object) با ساختاری به شکل نمونه زیر است:
<script>
var lang = new Array();
lang[0] = 'HTML';
lang[1] = 'CSS';
lang[2] = 'JavaScript'
alert(lang[2]);
</script>در این ساختار عبارت lang نام آرایه، اعداد 0 تا 2 کلیدهای آرایه و عبارات HTML، CSS و JavaScript مقادیر کلیدها هستند که به صورت جفتی (Key, Value) تعریف شده اند، ساز و کار آبجکت آرایه (Array Object) به صورت ذاتی در مفسر جاوا اسکریپت وجود دارد اما برای به کارگیری آرایه ها در کدنویسی باید اصول و قواعد خاصی را در رابطه با شیوه نگارش (Syntax) آنها رعایت کنیم که در ادامه خواهیم گفت.نکته 1: شی یا آبجکت (Object) اصطلاحی در برنامه نویسی شی گرا (Object Oriented) است که به متغیرها، توابع و... اطلاق می شود.
نکته 2: Index و Key دو مفهوم متفاوت هستند که هر دو برای استخراج Value از عناصر آرایه کاربرد دارند، Index زمانی استفاده می شود که شماره گذاری عناصر آرایه به صورت ترتیب عددی (از 0) و خودکار توسط مفسر انجام می شود، اما اصطلاح Key زمانی استفاده می شود که شماره یا برچسب گذاری توسط برنامه خارج از حالت پیش فرض و به صورت غیرخودکار تعریف شده باشد.
شیوه های تعریف آرایه در جاوا اسکریپت
برای تعریف آرایه در جاوا اسکریپت دو شیوه متفاوت وجود دارد که البته هر دو روش در نهایت نتیجه یکسانی داشته و آرایه های ایجاد شده از نظر فنی تفاوتی ندارند:
- استفاده از عبارت Array (به این عبارت در اصطلاح برنامه نویسی Constructor یا سازنده گفته می شود).
- استفاده از کاراکترهای [] (قلاب یا Square Bracket).
در هر دو شیوه یک متغیر کلی برای آرایه در نظر گرفته و سپس مقادیر زیر مجموعه آنها را (به صورت ایندکسی و خودکار یا با در نظر گرفتن کلید) به آرایه نسبت می دهیم، در ادامه این دو شیوه را به همراه مثال و نمونه کد بررسی می کنیم.
روش اول، تعریف آرایه با عبارت Array
در این روش ابتدا آرایه خالی را با دستور new Array به یک متغیر نسبت داده و سپس شماره کلیدها را در علامت های [] تعریف و مقادیر را با علامت = به آرایه اضافه می کنیم، به طور مثال:
<script>
//تعریف متغیر اصلی آرایه
var words = new Array();
//تعریف کلیدهای زیر مجموعه و مقادیر
words[0] = "آموزش";
words[1] = "جاوا";
words[2] = "اسکریپت";
//گرفتن خروجی از مقادیر کلیدهای آرایه
document.write(words[0] + ' ' + words[1] + ' ' + words[2]);
</script>برای دیدن پیش نمایش آنلاین مثال ها لطفا به انتهای این مطلب رجوع کنید.خروجی مثال بالا به شکل نمونه زیر خواهد بود:
آموزش جاوا اسکریپتتوضیح:- ابتدا با دستور var (یا let و const) و عبارت دلخواه words متغیر کلی برای آرایه تعریف و مقادیر متغیر را با دستور new Array تکمیل کرده ایم، این دستور به مفسر تفهیم می کند که قصد ایجاد متغیری از نوع آرایه را داریم.
- بعد از اینکه متغیر آرایه را تعریف کردیم باید کلیدها و مقادیر زیر مجموعه را مشخص کنیم، در مثال بالا اعداد بین کاراکترهای [] کلید (Key) و رشته های متنی بعد از علامت = مقدار (Value) هستند.
- کلیدهای آرایه در جاوا اسکریپت الزاما باید عددی باشند و در نظر گرفتن مقادیر متنی برای عنوان کلیدها صحیح نیست (در واقع ایجاد آرایه با کلیدهای متنی یا Associative Array در جاوا اسکریپت ممکن نیست و در صورت نیاز باید با کاراکترهای {} یک آبجکت ثابت (Literal) ایجاد کنیم که مبحث جداگانه ای از آبجکت آرایه است، در ادامه در این خصوص توضیح خواهیم داد).
- اگر هیچ عددی برای کلیدهای آرایه در نظر نگیریم مفسر به صورت خودکار از 0 کلیدها را شماره گذاری می کند که در این حالت از اصطلاح ایندکس به جای کلید استفاده می کنیم، دقت کنیم در مورد آرایه ها شماره گذاری خودکار ایندکس همیشه از 0 شروع می شود نه 1 (در اصطلاح آرایه ها را Zero-based می گویند).
- هر مقدار در مثال بالا در واقع یک عنصر (Element) زیرمجموعه از آرایه اصلی ما است که شماره کلید (Key) یا ایندکس (Index) اختصاصی خود را دارد، برای دسترسی به مقدار (Value) هر کلید کافی است مشابه نمونه زیر آن را فراخوانی کنیم:
words[1]با این دستور به مقدار کلید 1 آرایه دسترسی پیدا می کنیم (عبارت جاوا)، نحوه استفاده از کلیدها و مقادیر بسته به هدف ما در برنامه نویسی متفاوت خواهد بود و الزامی نیست که حتما مقادیر با دستورهایی مانند document.write به خروجی ارسال شوند، به فرض می توانند بعد از انجام فرایندی با مقادیر دیگری ترکیب یا تفریق شوند و خلاصه هر آنچه که در برنامه نویسی با یک متغیر معمول ممکن است در مورد عناصر آرایه نیز شدنی خواهد بود.در روش تعریف آرایه با عبارت Array می توانیم از شیوه مختصرنویسی به شکل نمونه زیر نیز استفاده کنیم که نتیجه نهایی تفاوتی با حالت بالا نخواهد داشت:
<script>
//تعریف متغیر اصلی آرایه به همراه مقادیر
var words = new Array("آموزش", "جاوا", "اسکریپت");
//گرفتن خروجی از مقادیر ایندکس های آرایه
document.write(words[0] + ' ' + words[1] + ' ' + words[2]);
</script>خروجی مثال بالا هم به شکل نمونه زیر خواهد بود:آموزش جاوا اسکریپتگفتیم که اگر برای کلیدها عددی در نظر نگیریم مفسر از 0 به صورت خودکار کلیدها را شماره گذاری می کند و در این حالت از عبارت ایندکس به جای کلید استفاده می کنیم.روش دوم، تعریف آرایه با کاراکترهای قلاب []
استفاده از عبارت Array تنها راه ایجاد آرایه در جاوا اسکریپت نیست، علاوه بر این روش می توانیم با در نظر گرفتن مقادیر برای متغیر به صورت کاراکترهای قلاب [] به مفسر تفهیم کنیم که هدف ایجاد متغیری از نوع آرایه است، به طور مثال:
<script>
//تعریف متغیر اصلی آرایه
var domains = [];
//تعریف کلیدهای زیر مجموعه و مقادیر
domains[0] = "ir";
domains[1] = "com";
domains[2] = "net";
//گرفتن خروجی از مقادیر کلیدهای آرایه
document.write('Key 0: ' + domains[0] + '<br>Key 1: ' + domains[1] + '<br>Key 2: ' + domains[2]);
</script>برای دیدن پیش نمایش آنلاین مثال ها لطفا به انتهای این مطلب رجوع کنید.خروجی مثال بالا به شکل نمونه زیر خواهد بود:
Key 0: ir
Key 1: com
Key 2: netتوضیح:- در اینجا نیازی نیست از عبارت new Array استفاده کنیم، در واقع زمانی که علامت های قلاب [] را برای تعریف متغیر به کار می بریم مفسر جاوا اسکریپت آن را به عنوان آبجکت آرایه شناسایی می کند.
- دسترسی به عناصر آرایه در هر دو روش مشابه است، به طور مثال اگر بخواهیم مقادیر کلید 0 را بررسی کنیم خواهیم نوشت:
if(domains[0] === "ir"){
alert('Key 0, Value is: ' + domains[0]);
}که نتیجه این بررسی به صورت زیر نمایش داده می شود:Key 0, Value is: irمشابه روش new Array در حالت کاراکترهای قلاب [] نیز می توانیم کلیدها را به صورت مختصرنویسی تعریف کنیم، به طور مثال:<script>
//تعریف متغیر اصلی آرایه و مقادیر
var domains = ["ir", "com", "net"];
//گرفتن خروجی از مقادیر ایندکس های آرایه
document.write('Index 0: ' + domains[0] + '<br>Index 1: ' + domains[1] + '<br>Index 2: ' + domains[2]);
</script>خروجی مثال بالا به شکل نمونه زیر خواهد بود:Index 0: ir
Index 1: com
Index 2: netبه جز تفاوت در شیوه شماره گذاری نتیجه نهایی در هر دو روش یکسان است.تعریف آرایه های دو یا چندبعدی (Multidimensional)
تعریف و استفاده از آرایه ها در برنامه نویسی به موارد ساده ای که در بالا بررسی کریم ختم نمی شود و ممکن است به آرایه هایی با عناصر تو در تو و پیچیده تری نیاز باشد، خوشبختانه مانند بسیاری از زبان های برنامه نویسی این امکان در جاوا اسکریپت نیز وجود دارد که بتوانیم آرایه دو یا چندبُعدی (Multidimensional) در کدهایمان داشته باشیم، برای تعریف این شکل آرایه کافی است برای هر عضو مد نظر به روش new Array یا قلاب [] یک زیرمجموعه جدید تعریف کنیم، در واقع آرایه دو یا چندبعدی خود زیرمجموعه آرایه سطح بالاتر یا آرایه آرایه (Array of Array) است، به طور مثال:
<script>
//تعریف متغیر اصلی آرایه
var continent = new Array();
//تعریف کلیدهای زیر مجموعه و مقادیر
continent[0] = ["Iran", "Afghanistan", "Japan"];
continent[1] = ["France", "Germany", "Norway"];
continent[2] = ["Brazil", "USA", "Argentina"];
//گرفتن خروجی از مقادیر کلیدهای آرایه
document.write('Key 0, Index 0: ' + continent[0][0] + '<br> Key 1, Index 1: ' + continent[1][1] + '<br> Key 2, Index 2: ' + continent[2][2]);
</script>برای دیدن پیش نمایش آنلاین مثال ها لطفا به انتهای این مطلب رجوع کنید.خروجی مثال های بالا به شکل نمونه زیر خواهد بود:
Key 0, Index 0: Iran
Key 1, Index 1: Germany
Key 2, Index 2: Argentinaشماره گذاری خودکار عناصر زیرمجموعه آرایه نیز از ایندکس 0 شروع می شود.استفاده از new Array برای آرایه های دو یا چندبعدی الزامی نیست، می توانیم به روش قلاب [] نیز متغیر را تعریف کنیم:
var continent = [];با استفاده از قلاب های تو در تو و زیرمجموعه ی بیشتر می توانیم آرایه را به بیش از دو بعد گسترش دهیم، به طور مثال:<script>
//تعریف متغیر اصلی آرایه
var continent = [];
//تعریف کلیدهای زیر مجموعه و مقادیر
continent[0] = [];
continent[0][0] = ["Iran", "Afghanistan", "Japan"];
continent[1] = [];
continent[1][0] = ["France", "Germany", "Norway"];
continent[2] = [];
continent[2][0] = ["Brazil", "USA", "Argentina"];
//گرفتن خروجی از مقادیر کلیدهای آرایه
document.write('Key 0,0, Index 0: ' + continent[0][0][0] + '<br> Key 1,0, Index 1: ' + continent[1][0][1] + '<br> Key 2,0, Index 2: ' + continent[2][0][2]);
</script>خروجی مثال بالا به شکل نمونه زیر خواهد بود:Key 0,0, Index 0: Iran
Key 1,0, Index 1: Germany
Key 2,0, Index 2: Argentinaدقت کنیم که در صورت نیاز به تعریف آرایه هایی با بیشتر از دو بعد، ابتدا آرایه سطح بالاتر باید به صورت متغیر تعریف شود تا خطای Undefined دریافت نکنیم.مشابه آنچه در مورد آرایه های تک بعدی دیدیم در اینجا هم می توانیم از شیوه مختصرنویسی به همراه کاراکتر جداکننده کاما (,) برای تعریف آرایه های دو یا چندبعدی استفاده کنیم، مثال:
<script>
//تعریف متغیر اصلی آرایه
var continent = new Array();
//تعریف کلیدهای زیر مجموعه و مقادیر
continent[0] = new Array(["Iran", "Afghanistan", "Japan"], ["France", "Germany", "Norway"], ["Brazil", "USA", "Argentina"]);
//گرفتن خروجی از مقادیر کلیدهای آرایه
document.write('Key 0,0,0: ' + continent[0][0][0] + '<br> Key 0,1,1: ' + continent[0][1][1] + '<br> Key 0,2,2: ' + continent[0][2][2]);
</script>یا<script>
//تعریف متغیر اصلی آرایه
var continent = [];
//تعریف کلیدهای زیر مجموعه و مقادیر
continent[0] = [["Iran", "Afghanistan", "Japan"], ["France", "Germany", "Norway"], ["Brazil", "USA", "Argentina"]];
//گرفتن خروجی از مقادیر کلیدهای آرایه
document.write('Key 0,0,0: ' + continent[0][0][0] + '<br> Key 0,1,1: ' + continent[0][1][1] + '<br> Key 0,2,2: ' + continent[0][2][2]);
</script>خروجی مثال های بالا به شکل نمونه زیر خواهد بود:Key 0,0,0: Iran
Key 0,1,1: Germany
Key 0,2,2: Argentinaهر آرایه زیرمجموعه با کاراکتر کاما (,) از آرایه های دیگر جداسازی شده است.نکته: جاوا اسکریپت به صورت ذاتی از آرایه هایی که کلیدهای آن رشته متنی باشد (Associative Array) پشتیبانی نمی کند، برای ایجاد این شکل آرایه باید از کاراکتر {} (آکولاد یا Curly Bracket) استفاده کنیم که در این حالت ماهیت متغیر از حالت آبجکت آرایه (Array Object) به آبجکت ثابت (Literal Object) تغییر می کند و اغلب متدهای متداول مربوط به کار با آرایه ها مستقیما در مورد آبجکت ثابت قابل استفاده نیست، در ادامه جهت آشنایی بیشتر این نوع آبجکت ها را نیز بررسی خواهیم کرد.
تعریف آرایه با کلید متنی در جاوا اسکریپت
گفتیم که امکان ایجاد آرایه با کلیدهای متنی (Associative Array) به صورت ذاتی در جاوا اسکریپت وجود ندارد، به طور مثال کد زیر:
<script>
var array_1 = new Array('first' => 'Farvardin', 'second' => 'Ordibehesht', 'third' => 'Khordad');
alert(array_1['second']);
</script>خطای Uncaught SyntaxError: invalid arrow-function argumentsرا در خروجی کنسول مرورگر چاپ می کند، اما اگر بخواهیم این سبک آبجکت در برنامه خود داشته باشیم چه راه حلی در دسترس است؟راه حلی که در جاوا اسکریپت برای اینگونه موارد وجود دارد استفاده از آبجکت ثابت (Literal Object) است، آبجکت ثابت با استفاده از کاراکترهای {} (آکولاد یا Curly Bracket) تعریف و شامل داده های جفتی نام/مقدار است، به طور مثال:
<script>
var literal_1 = {first:'Farvardin', second:'Ordibehesht', third:'Khordad'};
alert(literal_1['second']);
</script>خروجی نمونه کد بالا به صورت زیر خواهد بود:Ordibeheshtهر آبجکت ثابت با کاراکتر { شروع و با کاراکتر } بسته می شود، عناصر زیرمجموعه آبجکت با کاراکتر کاما (,) از هم جدا می شوند، هر نام می تواند در یا خارج از کاراکترهای '' (Single Quotation) یا "" (Double Quotation) تعریف شود، مقادیر هم می توانند هر نوع آبجکتی (رشته متنی، آرایه، عدد، تابع، آبجکت ثابت و...) باشند، نام و مقدار با کاراکتر دونقطه (: یا Colon) جفت می شوند، یک مثال کمی پیچیده تر از نحوه تعریف و استفاده از آبجکت ثابت در جاوا اسکریپت:<script>
var literal_1 = {first:'Farvardin', second:'Ordibehesht', third:'Khordad'};
var literal_2 = {
'name_1':literal_1,
'name_2':new Array(1, 2, 3),
'name_3':'Jalali Months'
};
alert(literal_2['name_1']['first'] + ' is ' + literal_2['name_2'][0] + ' in ' + literal_2['name_3']);
</script>که خروجی نمونه کد بالا به شکل زیر خواهد بود:Farvardin is 1 in Jalali Monthsنکته جالب انعطاف پذیری جاوا اسکریپت در نحوه تعریف آبجکت های ثابت و دسترسی به عناصر آنها است.در خصوص آبجکت های ثابت، نحوه تعریف، دسترسی و تغییر مقادیر آنها در آموزش های پیش رو به صورت جداگانه صحبت خواهیم کرد.
افزودن یا حذف عنصر آرایه در JavaScript
در مثال های بالا با نحوه دسترسی به عناصر آرایه به روش ایندکس (Index) و کلید (Key) آشنا شدیم، اما اگر بخواهیم یک عنصر را در مرحله دیگری از برنامه به آرایه اضافه یا برعکس اگر بخواهیم عنصری را از آرایه حذف کنیم چاره چیست؟
در اغلب زبان های برنامه نویسی برای اینگونه موارد توابع اختصاصی جداگانه ای تعریف می شود و ما هم در ادامه این سری از آموزش ها متدهای کار با آرایه در JavaScript را بررسی خواهیم کرد منتها حذف و اضافه ساده نیازی به استفاده از متد اختصاصی ندارد و به صورت زیر انجام می شود.
برای افزودن یک عنصر به آرایه بعد از مرحله تعریف کافی است از روش نمونه زیر پیروی کنیم:
<script>
var numbers = new Array(100, 200, 300, 400);
numbers[4] = 500;
alert(numbers);
</script>خروجی مثال بالا به صورت زیر خواهد بود:100,200,300,400,500در برخی زبان های برنامه نویسی مانند PHP اگر کلید عضو جدید را تعریف نکنیم خود مفسر به صورت پیش فرض آخرین کلید را جایگزین می کند اما در جاوا اسکریپت در نظر گرفتن کلید برای افزودن عنصر به آرایه در روش قلاب الزامی است که در نمونه کد بالا عدد 4 به عنوان کلید در نظر گرفته شده است.برای حذف عناصر آرایه نیز متدهایی مانند pop، shift، splice و filter کاربرد دارند که در این رابطه در آموزش بعدی مفصل صحبت خواهیم کرد، اما ساده ترین روش حذف عنصر از آرایه استفاده از دستور عمومی delete است، به طور مثال:
<script>
var numbers = new Array(100, 200, 300, 400);
delete(numbers[2]);
alert(numbers);
</script>خروجی نمونه کد بالا به صورت زیر خواهد بود:100,200,,400با دقت در خروجی کد مشخص است که دستور delete طول آرایه را تغییر نمی دهد و صرفا مقادیر ایندکس/کلید مورد نظر را حذف می کند.استفاده از حلقه forEach در آرایه
در آموزش های قبلی با حلقه های for و while در جاوا اسکریپت آشنا شدیم و گفتیم که شکل سوم حلقه ها یعنی forEach در خصوص آرایه ها کاربرد دارد، حلقه forEach مورد به مورد عناصر آرایه را از فیلتر تابع بازگشتی (Callback) عبور می دهد، این تابع بازگشتی به سه صورت زیر قابل تعریف است:
forEach((element, index, array) => {});
forEach(myFunction, this);
forEach(function myFunction(element, index, array) {}, this);در این ساختارها element آرگیومنتی است که مقادیر (Value) هر عضو آرایه را در خود دارد، index شامل شماره موقعیت عناصر (شمارش خودکار و از 0) یا کلید (Key) و array آرایه فعلی است که در حلقه forEach قرار گرفته است، از بین این آرگیومنت ها وجود element اجباری و سایر موارد اختیاری (Optional) هستند، مثالی از کاربرد حلقه forEach در JavaScript:<script>
var array_1 = ['JS', 'PHP', 'MySQL'];
array_1.forEach((element, index, array) => {alert('Index ' + index + ' value is: ' + element)});
</script>خروجی:Index 0 value is: JS
Index 1 value is: PHP
Index 2 value is: MySQLبه این شکل توابع مبتنی بر کاراکتر دستوری <= در اصطلاح تابع پیکان یا Arrow Function گفته می شود، مثالی از کاربرد تابع بازگشتی خارجی در حلقه forEach:<script>
var array_1 = ['JS', 'PHP', 'MySQL', [20, 14, 33]];
var str = '';
var all = 0;
var loop = 1;
function myFunction(element, index, array){
if(!Array.isArray(element)){
str += element;
if((loop + 1) < array.length){
str += '&';
}
} else {
element.forEach((value) => {all += value;});
}
if(loop === array.length){
alert(str + ' = ' + all);
}
loop++;
}
array_1.forEach(myFunction);
</script>نمونه کد بالا خروجی زیر را در مرورگر نمایش می دهد:JS&PHP&MySQL = 67با دقت در ساختار کدها مشخص است که از حلقه forEach تو در تو برای بررسی مقادیر ایندکس چهارم آرایه array_1 استفاده کرده ایم، این عنصر به صورت آرایه زیرمجموعه درون آرایه اصلی تعریف شده است.همان طور که از خروجی حلقه ها مشخص است با forEach به راحتی می توانیم کلیدها و مقادیر آرایه مورد نظر را مورد به مورد بررسی یا ویرایش کنیم.
در خصوص متدهای Array.isArray و length در ادامه مباحث آموزش مقدماتی جاوا اسکریپت مفصل توضیح خواهیم داد، در اینجا همین قدر بدانیم که Array.isArray آرایه بودن یا نبودن پارامتر تنظیم شده را بررسی و true یا false برمی گرداند، length هم تعداد عناصر زیرمجموعه سطح یک را به عنوان طول آرایه شمارش می کند.
مثال و پیش نمایش آنلاین
در نمونه کدهای زیر تقریبا برای تمام موارد گفته شده در خصوص آرایه ها می توانیم مثال به همراه پیش نمایش آنلاین آن را بررسی کنیم:
<!DOCTYPE html>
<html lang="fa">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>وبگو | آرایه ها در جاوا اسکریپت</title>
<!-- Webgoo.ir -->
<style>
body{
font-family: Tahoma, Geneva, sans-serif;
direction: rtl;
font-size: 12px;
}
</style>
</head>
<body>
<noscript>
جاوا اسکریپت در مرورگر شما غیر فعال است!<br>
</noscript>
تعریف آرایه با عبارت new Array:<br><br>
<script>
//تعریف متغیر اصلی آرایه
var words = new Array();
//تعریف کلیدهای زیر مجموعه و مقادیر
words[0] = "آموزش";
words[1] = "جاوا";
words[2] = "اسکریپت";
//گرفتن خروجی از مقادیر کلیدهای آرایه
document.write(words[0] + ' ' + words[1] + ' ' + words[2]);
</script>
<hr>
تعریف آرایه بالا به روش مختصرنویسی:<br><br>
<script>
//تعریف متغیر اصلی آرایه به همراه مقادیر
var words = new Array("آموزش", "جاوا", "اسکریپت");
//گرفتن خروجی از مقادیر ایندکس های آرایه
document.write(words[0] + ' ' + words[1] + ' ' + words[2]);
</script>
<hr>
تعریف آرایه با کاراکتر قلاب []:<br><br>
<script>
//تعریف متغیر اصلی آرایه
var domains = [];
//تعریف کلیدهای زیر مجموعه و مقادیر
domains[0] = "ir";
domains[1] = "com";
domains[2] = "net";
//گرفتن خروجی از مقادیر کلیدهای آرایه
document.write('Key 0: ' + domains[0] + '<br>Key 1: ' + domains[1] + '<br>Key 2: ' + domains[2]);
</script>
<hr>
تعریف آرایه بالا به روش مختصرنویسی:<br><br>
<script>
//تعریف متغیر اصلی آرایه و مقادیر
var domains = ["ir", "com", "net"];
//گرفتن خروجی از مقادیر ایندکس های آرایه
document.write('Index 0: ' + domains[0] + '<br>Index 1: ' + domains[1] + '<br>Index 2: ' + domains[2]);
</script>
<hr>
تعریف آرایه دو بعدی:<br><br>
<script>
//تعریف متغیر اصلی آرایه
var continent = new Array();
//تعریف کلیدهای زیر مجموعه و مقادیر
continent[0] = ["Iran", "Afghanistan", "Japan"];
continent[1] = ["France", "Germany", "Norway"];
continent[2] = ["Brazil", "USA", "Argentina"];
//گرفتن خروجی از مقادیر کلیدهای آرایه
document.write('Key 0,0: ' + continent[0][0] + '<br> Key 1,1: ' + continent[1][1] + '<br> Key 2,2: ' + continent[2][2]);
</script>
<hr>
تعریف آرایه چندبعدی:<br><br>
<script>
//تعریف متغیر اصلی آرایه
var continent = [];
//تعریف کلیدهای زیر مجموعه و مقادیر
continent[0] = [];
continent[0][0] = ["Iran", "Afghanistan", "Japan"];
continent[1] = [];
continent[1][0] = ["France", "Germany", "Norway"];
continent[2] = [];
continent[2][0] = ["Brazil", "USA", "Argentina"];
//گرفتن خروجی از مقادیر کلیدهای آرایه
document.write('Key 0,0,0: ' + continent[0][0][0] + '<br> Key 1,0,1: ' + continent[1][0][1] + '<br> Key 2,0,2: ' + continent[2][0][2]);
</script>
<hr>
تعریف آرایه با کلیدهای متنی:<br><br>
<script>
var literal_1 = {first:'Farvardin', second:'Ordibehesht', third:'Khordad'};
var literal_2 = {
'name_1':literal_1,
'name_2':new Array(1, 2, 3),
'name_3':'Jalali Months'
};
document.write(literal_2['name_1']['first'] + ' is ' + literal_2['name_2'][0] + ' in ' + literal_2['name_3']);
</script>
<hr>
استفاده از حلقه forEach در جاوا اسکریپت:<br><br>
<script>
var array_1 = ['JS', 'PHP', 'MySQL', [20, 14, 33]];
var str = '';
var all = 0;
var loop = 1;
function myFunction(element, index, array){
if(!Array.isArray(element)){
str += element;
if((loop + 1) < array.length){
str += '&';
}
} else {
element.forEach((value) => {all += value;});
}
if(loop === array.length){
document.write(str + ' = ' + all);
}
loop++;
}
array_1.forEach(myFunction);
</script>
</body>
</html>پیش نمایش آنلایندر آموزش پیش رو در خصوص متدهای پرکاربرد کار با آرایه در جاوا اسکریپت صحبت خواهیم کرد.
دسته بندی: آموزش مقدماتی » JavaScript
برچسب ها: JavaScript
عملگرها (Operators) در جاوا اسکریپت (JavaScript)
توابع (Functions) در جاوا اسکریپت (JavaScript)
شروعی بر برنامه نویسی جاوا اسکریپت (JavaScript)
حلقه for و while در جاوا اسکریپت (JavaScript)
دستور switch و case در جاوا اسکریپت (JavaScript)
دیدگاه
محمود
۰۸:۵۷ ۱۴۰۰/۰۷/۲۵
استاد عزیز از راهنمای هایتان بسیار سپاسگزارم . این کار را کردم و جواب داد. البته شماره های سوالات undefined میکرد که شاید بشه اون را حذف کرد و مسئله ای انچنانی نیست .فقط یک مشکل هست و اون اینکه من میخواهم بعد از کلیک روی شروع و ادامۀ آزمون فقط تعداد محدودی از سوال ها تو آزمون بیاد . مثلن از 30 سوال 10 تا و بعد پایان و قسمت امتیازها. لطفن راهنمایی کنید.
با تشکر
با تشکر
این کار هم باید در فایل questions.js انجام دهید یعنی به جای 33 آیتم برای هر آبجکت 10 آیتم تعیین کنید، در کل خیلی نمی توانید روی سفارشی سازی این کد به صورت سریع مانور دهید چون کدهای قسمت script.js با پیوستگی نوشته شده و با تغییر یک قسمت بخش های دیگری هم باید تغییر اساسی کنند، یک نکته دیگر اینکه این سیستم آزمون آنلاین چون صرفا از برنامه نویسی سمت کاربر (زبان جاوا اسکریپت) استفاده می کند به راحتی قابل دور زدن است! سیستم های آزمون آنلاین معمولا ترکیبی از JavaScript + Ajax + PHP هستند.
محمود
۱۹:۰۰ ۱۴۰۰/۰۷/۲۴
لطفن از این آدرس
https://genepo.ir/TEST-Quizکدها را برسی کنید. من در فانکشن showQuetions(index) ، قسمت let que_tag = '<span>'+ questions[index].numb + ". " + questions[index].question +'</span>'; به let que_tag = '<span>'+ questions[index].numb + ". " + questions[Math.floor(Math.random() * 33)].question +'</span>'; تغییر دادم ولی فقط سوال بصورت تصادفی انتخاب شد و آپشن ها (گزینه ها) با سوال ها هم خوانی نکرد . یعنی اینکه 4 گزینه سوال 1 برای سوال ، مثال 9 و 4 گزینه سوال 2 ، مثلن برای 6 و .. درج می شد.کدهای شما طوری نوشته شده که شمارش سوالات به ترتیب باشد و اگر نظم را بهم بزنید باید کل کدهای فایل script.js ویرایش شوند، اما یک راه برای ایجاد سوالات غیر تکراری با شرایط فعلی وجود دارد و آن هم در نظر گرفتن چند سری سوال مختلف در فایل questions.js به صورت ساختار نمونه زیر است:
let all_questions = 2;
let rand_index = Math.floor(Math.random() * all_questions) + 1;
let questions;
switch(rand_index){
case 1:
questions = [
{
.
.
.
},
{
.
.
.
}
];
break;
case 2:
questions = [
{
.
.
.
},
{
.
.
.
}
];
break;
}محمود
۱۱:۱۰ ۱۴۰۰/۰۷/۲۴
سلام مهندس عزیز
من سوالات و گزینه ها را در یک آرایه نوشتم . با کلیک روی دکمه ای که ساختم، سوالات و جواب ها هم در خروجی نشان داده می شود. مشکل من این هست که کاربر با هر بار که صفحه آزمون را باز می کند . با همون سوالات تکراری مواجه می شود. من می خواستم فانکشن showQuetions(index) را طوری تغییر بدهید که سوالات را بصورت تصادفی انتخاب بشن. لطفن راهنمایی کنید. با تشکر فراوان
من سوالات و گزینه ها را در یک آرایه نوشتم . با کلیک روی دکمه ای که ساختم، سوالات و جواب ها هم در خروجی نشان داده می شود. مشکل من این هست که کاربر با هر بار که صفحه آزمون را باز می کند . با همون سوالات تکراری مواجه می شود. من می خواستم فانکشن showQuetions(index) را طوری تغییر بدهید که سوالات را بصورت تصادفی انتخاب بشن. لطفن راهنمایی کنید. با تشکر فراوان
function showQuetions(index){
const que_text = document.querySelector(".que_text");
//creating a new span and div tag for question and option and passing the value using array index
let que_tag = '<span>'+ questions[index].numb + ". " + questions[index].question +'</span>';
let option_tag = '<div class="option"><span>'+ questions[index].options[0] +'</span></div>'
+ '<div class="option"><span>'+ questions[index].options[1] +'</span></div>'
+ '<div class="option"><span>'+ questions[index].options[2] +'</span></div>'
+ '<div class="option"><span>'+ questions[index].options[3] +'</span></div>';
que_text.innerHTML = que_tag; //adding new span tag inside que_tag
option_list.innerHTML = option_tag; //adding new div tag inside option_tag
const option = option_list.querySelectorAll(".option");
// set onclick attribute to all available options
for(i=0; i < option.length; i++){
option[i].setAttribute("onclick", "optionSelected(this)");
}
}
لطفا کد کامل را در یک صفحه HTML ترجیحا آنلاین درج کنید تا امکان تست و بررسی و در صورت امکان توسعه برنامه فراهم باشد، در این تکه کدی که درج کرده اید متغیرهایی وجود دارد که ظاهرا در جای دیگری از برنامه تعریف شده اند و لذا کد قابلیت تست و رفع اشکال مستقل ندارد.
رسول
۰۸:۰۳ ۱۳۹۸/۱۱/۰۸
مشکل اینه این کد رو زدم باز نخوند
نمیشه
متاسفانه هر کاری کاری میکنم نمیخونه
نمیشه
var tl = new Array(text);داخل این به جای متن لینک جاگذاری کرد؟متاسفانه هر کاری کاری میکنم نمیخونه
<script language="Javascript">
var text = document.getElementById("text").text;
var tl = new Array(text);
</script> اینو زدم و لینکی که زدمم به این صورت هستش http://example.com/admin.txt متاسفانه متن اینو نمیخونه کلا هیچ متنی نخوند اینبار اگه میشه لینک همون داخل اسکریپت باشهلطفا کدها را در یک نمونه صفحه درج و آدرس صفحه یا فایل HTML آن را (از طریق ایمیل سایت) همراه با توضیحات دقیق مشکل ارسال کنید تا امکان بررسی میسر باشد.
رسول
۱۳:۳۸ ۱۳۹۸/۱۱/۰۶
سلام
ممنون میشم کمکم کنید
var tl = new Array(متن); میخوام بجای نمایش متن، متن موجود در یه لینکو بهم نشون بده ممنون میشم کمکم کنید
سوالتان مبهم است، در حد توضیحات ارائه شده برای دریافت متن یک لینک می توانید از نمونه کد زیر پیروی کنید:
<a href="http://example.com" id="test">نمونه لینک</a>
<script>
var text = document.getElementById("test").text;
var tl = new Array(text);
</script>Erfan
۱۲:۴۳ ۱۳۹۸/۰۴/۱۴
سلام یه سوال داشتم
حقیقت من دارم js رو یاد میگیرم به مبحث آرایه رسیدم متوجه نشدم و حقیقت کاربردش رو میخوام بدونم ممنون
حقیقت من دارم js رو یاد میگیرم به مبحث آرایه رسیدم متوجه نشدم و حقیقت کاربردش رو میخوام بدونم ممنون
به زبان ساده آرایه مجموعه ای از متغیرهای دارای مشابهت در قالب یک متغیر است! به فرض اگر بخواهیم مقادیر سنی 10 کاربر را به صورت یکجا در برنامه خود داشته و محاسباتی را بر این اساس انجام دهیم استفاده از آرایه می تواند گزینه مناسبی باشد، در اغلب زبان های برنامه نویسی دستوراتی برای کار با مجموعه متغیرها به صورت دور تکرار for یا while وجود دارد که استفاده از آرایه در این حلقه ها کار را بسیار ساده تر و روند برنامه را سریعتر پیش می برد، یک کاربرد دیگر آرایه فراهم کردن شرایط مختصر نویسی است، در حالت عادی باید هر متغیر را به صورت جداگانه و با مقادیر مجزا تعریف کنیم اما با آرایه می توانیم موارد مشابه را با یک کلیدواژه تعریف و به آنها در فرآیند پردازش برنامه دسترسی داشته باشیم.
sahel
۱۲:۰۲ ۱۳۹۸/۰۳/۱۷
سلام وقت بخیر
فرمی طراحی کردم که یکی از input های فرم به صورت آریه مقادیر دریافت میکنه . به این صورت
با آرایه مشکل دارم دقیق نمیدونم باید از چه کد جاوا اسکریپت استفاده کنم! این قسمت مشکل دارم
فرمی طراحی کردم که یکی از input های فرم به صورت آریه مقادیر دریافت میکنه . به این صورت
<input type="text" name="input_name[]" id="input_name[]" />حالا قصد دارم با رویداد کلیک به صورت جاوااسکریپت تمام مقادیر دریافت کنم . با آرایه مشکل دارم دقیق نمیدونم باید از چه کد جاوا اسکریپت استفاده کنم! این قسمت مشکل دارم
var name=document.getElementById('input_name[]').value;مقدار آخر دریافت میکنه فقط !!!باید به چند نکته توجه داشته باشید:
- آی دی را به صورت یکتا تعریف کنید.
- برای دریافت مقادیر از فیلدهای input چندگانه بهتر است از متد getElementsByName در جاوا اسکریپت استفاده کنید.
- کار با آرایه ها معمولا مستلزم استفاده از حلقه for یا while است.
مثال:
- آی دی را به صورت یکتا تعریف کنید.
- برای دریافت مقادیر از فیلدهای input چندگانه بهتر است از متد getElementsByName در جاوا اسکریپت استفاده کنید.
- کار با آرایه ها معمولا مستلزم استفاده از حلقه for یا while است.
مثال:
<input type="text" name="input_name[]" id="input_name_1">
<input type="text" name="input_name[]" id="input_name_2">
<script>
function getMultipleInput(){
var elm = document.getElementsByName("input_name[]");
var names = [];
for(var i = 0; i < elm.length; ++i) {
if(typeof elm[i].value !== "undefined") {
alert(elm[i].value);
names[i] = elm[i].value;
}
}
alert(names);
}
</script>
<button onclick="getMultipleInput();">Alert!</button>somaye
۱۸:۵۹ ۱۳۹۷/۰۲/۲۸
با سلام من میخوام چندین عکس رو در یه آرایه به صورت تصادفی و پشت سرهم نمایش بدم
ممنون میشم راهنمایی کنید
<html>
<body>
<script>
var myArray = new Array();
myArray[0]= '<img src="1.jpg" width="50" height="500" />';
myArray[1] = '<img src="7.jpg" width="50" height="500" />';
myArray[2] = '<img src="4.jpg" width="50" height="500" />';
var rand = Math.floor(Math.random() * 3) + 0;
document.write(myArray[rand]); alert(rand);
</script>
</body>
</html>به این صورت نوشتم ولی جوابی نگرفتمممنون میشم راهنمایی کنید
کد شما خطای Syntax دارد (اصلاح شد).
negin
۱۶:۵۱ ۱۳۹۷/۰۲/۲۳
سلام من میخوام در notpad به زبان javascript تابعی بنویسم که ماتریس دو بعدی بگیره بعد max یا min اون رو برگردونه ممنون میشم کدشو بذارین
نمونه کد زیر برای این منظور کاربرد دارد:
<script>
function jsMatrix(array, type){
var values = array[0].concat(array[1]);
switch(type){
case 'min':
return Math.min.apply(null, values);
break;
case 'max':
return Math.max.apply(null, values);
break;
}
return false;
}
var m = [[1, 2], [2, 3]];
alert(jsMatrix(m, 'min'));
</script>مسعود
۱۹:۱۰ ۱۳۹۷/۰۱/۰۶
سلام وقت بخیر یک کمکم خواستم . چگونه میتوان در محدوده خاص مثلا بین عدد 20 تا 70 فقط اعداد زوج خروجی گرفت و چاپ کرد. با تشکر
برای نمایش اعداد زوج یا فرد در یک محدوده خاص می توانید از تابع زیر در PHP استفاده کنید:
<?php
/** Function By Webgoo.ir **/
function countOddEven($start = 0, $end = 20, $type = null){
@$result = array();
for($i = $start; $i <= $end; $i++){
$check = $i % 2;
if($check == 0 && $type == 'odd'){
$result[] = $i;
} elseif($check != 0 && $type == 'even'){
$result[] = $i;
}
}
return $result;
}
//$count = countOddEven(20, 70, 'even');
$count = countOddEven(20, 70, 'odd');
foreach($count as $key => $value){
echo '#' . $key . ' = ' . $value . '<br>';
}
?>f j
۱۱:۳۳ ۱۳۹۶/۱۱/۲۹
سلام. منبع برای آموزش موارد بیشتر و همچنین ماتریس در جاوا اسکریپت سراغ دارین؟
مرسی
مرسی
با یک جستجوی ساده منابع زیادی پیدا خواهید کرد، چند نمونه:
https://developer.mozilla.org/en-US/docs/Web/API/WebGL_API/Matrix_math_for_the_webhttps://www.robinwieruch.de/linear-algebra-matrix-javascriptمهدی
۱۷:۵۴ ۱۳۹۶/۱۰/۲۰
سلام یه پروژه به من دادن اما نمیتونم انجامش بدم خواهش میکنم کمکم کنید
ساخت یک آرایه با هزار عنصر و جمع مقادیر آنها
ساخت یک آرایه با هزار عنصر و جمع مقادیر آنها
می توانید از نمونه کدهای زیر الگوبرداری کنید:
<script>
var my_array = new Array();
var array_sum = 0;
for(var i = 0; i < 1000; i++){
my_array[i] = i;
array_sum += i;
}
alert('Array Length:' + my_array.length + ' - Array Sum:' + array_sum);
</script>صادق
۱۰:۵۷ ۱۳۹۶/۰۸/۰۷
سلام دوست عزیز در ادامه سوال قبلیم کد برنامه را براتون میزارم لطفا شما بررسی نمایید مشکلش چیه.
برای نمونه فقط کد یه سوالا میزارم
برای نمونه فقط کد یه سوالا میزارم
حذف شدکدها بر اساس سشن نوشته شده اند و به نظر نمی رسد مشکل از این مورد باشد، اطلاعات هر کاربر به صورت مستقل پردازش می شود لذا اشکال کار باید از مورد دیگری باشد، ممکن است کاربر به نحوی بدون انتخاب گزینه، فرم را ارسال کند و مواردی از این قبیل، در هر حال برای بررسی بیشتر باید دسترسی آنلاین به برنامه و امکان تست وجود داشته باشد.
صادق
۱۷:۳۱ ۱۳۹۶/۰۸/۰۶
سلام دوست عزیز
در برنامه چند تا سوال 4 گزینه ای داریم که گزینه ها به صورت radio button است و وقتی کاربر دکمه ثبت را میزنه جوابهای انتخاب شده از طریق جاوا اسکریپت دریافت شده و داخل یک آرایه (MyArray) قرار میگیره و بعد از طریق ajax داخل دیتابیس میشینه، حالا اگر دو کاربر دقیقا همزمان دکمه ثبت را بزنند ممکنه اطلاعات داخل آرایه عوض بشه ، چون جواب بعضی (در حد 4 نفر از 50 نفر شرکت کننده) از کاربرا تو دیتابیس عدم انتخاب گزینه (صفر) درج شده است.
در برنامه چند تا سوال 4 گزینه ای داریم که گزینه ها به صورت radio button است و وقتی کاربر دکمه ثبت را میزنه جوابهای انتخاب شده از طریق جاوا اسکریپت دریافت شده و داخل یک آرایه (MyArray) قرار میگیره و بعد از طریق ajax داخل دیتابیس میشینه، حالا اگر دو کاربر دقیقا همزمان دکمه ثبت را بزنند ممکنه اطلاعات داخل آرایه عوض بشه ، چون جواب بعضی (در حد 4 نفر از 50 نفر شرکت کننده) از کاربرا تو دیتابیس عدم انتخاب گزینه (صفر) درج شده است.
سوالتان کمی مبهم است!، اگر برای هر کاربر سشن و کوکی خاص آن را تعریف کنید نباید تداخلی بین کاربران مختلف رخ دهد و اطلاعات هر کاربر با توجه به مشخصات او به صورت جداگانه ثبت می شود، در واقع با توجه به توضیحات ارائه شده به نظر مشکل از نحوه تعریف ساختار کلی برنامه شما است!
جعفر
۲۰:۱۷ ۱۳۹۶/۰۶/۲۶
سلام. من میخام کارهایی مثل حذف کردن یک عنصر از بردار و اضافه کردنش به جای دیگه ای از بردار رو کد کنم و کارهای دیگه. میشه یه منبع برای آموزش این کدنویسی در جاوا اسکریپت معرفی کنین؟ مرسی
متاسفانه منبع مناسبی برای آموزش این مبحث در اختیار نداریم، صرفا کلاس ها و توابع آماده برای این مورد وجود دارد که با جستجو در وب می توانید آنها را پیدا کنید.
https://www.google.com/search?q=vector+to+code+js
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.