پنجشنبه ۰۱ آذر ۱۴۰۳

Thursday, November 21, 2024 GMT +3:30

متدهای کار با آرایه در جاوا اسکریپت (JavaScript)

javascript-array

اکنون که با آرایه ها و نحوه تعریف و کاربرد آنها آشنا شدیم نوبت رسیده که گام را کمی فراتر گذاشته و متدهای کار با آرایه را بشناسیم، متدها (Methods) توابع از پیش تعریف شده ای هستند که به صورت ذاتی در مفسر جاوا اسکریپت وجود دارند و می توانیم به کمک آنها آبجکت آرایه (Array Object) و عناصر زیرمجموعه آن را بررسی، ویرایش، استخراج یا تبدیل کنیم، در کدنویسی برنامه ها استفاده از این دستورات ذاتی به خصوص در زمینه کار با آرایه ها متداول و اغلب اجتناب ناپذیر است و به همین دلیل در بیشتر زبان های برنامه نویسی تعداد زیادی متد از پیش تعریف شده درونی (Built-in) برای این کار وجود دارد، در ادامه در حد مقدور پرکاربردترین متدهای کار با آرایه در جاوا اسکریپت را بررسی می کنیم.

متد Array.of


متد Array.of برای ایجاد آرایه از مقادیر تنظیم شده به عنوان آرگیومنت کاربرد دارد، کارکرد این متد هم مشابه دستور new Array است و یک آبجکت آرایه (Array Object) ایجاد می کند با این تفاوت که اگر پارامتر تنظیم شده به عنوان آرگیومنت صرفا یک عدد باشد، Array.of آرایه ای با ایندکس 0 ایجاد و آن عدد را به عنوان مقدار لحاظ می کند اما دستور new Array به تعداد عدد تعیین شده ایندکس و برای مقدار جایگاه خالی (Empty Slot) در نظر می گیرد، مثال:
<script>
console.log(Array.of(3));
console.log(new Array(3));
console.log(Array.of(1, 2, 3));
console.log(new Array(1, 2, 3));
</script>
نتیجه اجرای نمونه کد بالا به شکل زیر در خروجی Console مرورگر نمایش داده می شود:
[3]
[,,] یا [<3 empty slots>]
[1, 2, 3]
[1, 2, 3]
برای دسترسی به قسمت Console مرورگرها می توانیم دکمه F12 را فشرده یا از قسمت Developer به این امکان دسترسی پیدا کنیم.

متد Array.from


متد Array.from با و بدون تابع بازگشتی (Callback) آرگیومنت دریافتی را تجزیه و به آرایه تبدیل می کند، در صورتی که آرگیومنت دوم این متد به صورت تابع بازگشتی تنظیم شود هر عضو آرایه به ترتیب از فرآیند تابع عبور داده خواهند شد، مقادیر آرگیومنت اول متد Array.from می تواند یک آبجکت طبق پروتکل Iteration باشد (به فرض رشته متنی باشد) یا اینکه یک شبه آرایه (پارامترهای داخل کاراکتر قلاب []) را برای پارامتر اول به همراه تابع بازگشتی در نظر بگیریم، مثال:
<script>
console.log(Array.from('JavaScript'));
console.log(Array.from([1, 2, 3], x => x * x));
</script>
نتیجه اجرای نمونه کد بالا به شکل زیر در خروجی Console مرورگر نمایش داده می شود:
["J", "a", "v", "a", "S", "c", "r", "i", "p", "t"]
[1, 4, 9]
در تابع بازگشتی نمونه دوم هر مقدار از آرایه در خودش ضرب شده است.

متد Array.isArray


متد Array.isArray مقادیر تنظیم شده به عنوان آرگیومنت را بررسی و در صورتی که مقدار از نوع آرایه (Array Object) باشد true و در غیر اینصورت false را به عنوان نتیجه بررسی برمی گرداند، مثال:
<script>
var str_1 = 'Hello!';
var array_1 = [1, 2, 3];
console.log(Array.isArray(str_1));
console.log(Array.isArray(array_1));
</script>
نتیجه اجرای نمونه کد بالا به شکل زیر در خروجی Console مرورگر نمایش داده می شود:
false
true
متغیر str_1 از نوع String است و در نتیجه متد Array.isArray مقادیر false را برمی گرداند.

متد includes


متد includes وجود یک مقدار را بین عناصر (مقادیر) آرایه بررسی و در صورت وجود نتیجه را true و در غیر اینصورت false برمی گرداند، مثال:
<script>
var array_1 = [11, 32, 77];
alert(array_1.includes(44));
alert(array_1.includes(32));
</script>
خروجی این کد به صورت زیر نمایش داده خواهد شد:
false
true
عدد 44 در عناصر آرایه array_1 وجود ندارد (false) اما عدد 32 به عنوان مقادیر ایندکس 1 در آرایه وجود دارد (true).

متد length


متد length برای بدست آوردن تعداد عناصر آرایه کاربرد دارد، به طور مثال:
<script>
var array_1 = [1, 5, 2];
alert('Length of array_1 is: ' + array_1.length);
</script>
خروجی این کد به صورت زیر نمایش داده خواهد شد:
Length of array_1 is: 3
عدد 3 یعنی طول آرایه 3 عنصر است.

متد concat


متد concat برای ترکیب دو آرایه و ایجاد آرایه جدید به کار می رود، به طور مثال:
<script>
var array_1 = [1, 5, 2];
var array_2 = [4, 9, 3];
var array_3 = array_1.concat(array_2);
for(var i = 0; i < array_3.length; i++){
    alert('Index ' + i + ' Value is: ' + array_3[i]);
}
</script>
با اجرای این نمونه کد در خروجی مقادیر زیر به صورت پیام هشدار نمایش داده می شود:
Index 0 Value is: 1
Index 1 Value is: 5
Index 2 Value is: 2
Index 3 Value is: 4
Index 4 Value is: 9
Index 5 Value is: 3
همان طور که مشخص است در حلقه for به تعداد اعضای آرایه array_3 که ترکیب آرایه های array_1 و array_2 به کمک متد concat است، دستور alert خروجی متفاوتی خواهد داشت.

متد toString


متد toString برای الحاق تمام عناصر آرایه در رشته متنی کاربرد دارد، به طور مثال:
<script>
var array_1 = ['Java', 'Script'];
alert(array_1.toString());
</script>
خروجی این نمونه کد به صورت زیر خواهد بود:
Java,Script
متد toString به صورت خودکار از کاراکتر کاما (,) برای اتصال عناصر آرایه و تبدیل به رشته متنی استفاده می کند، در صورتی که به این کاراکتر نیاز نباشد یا بخواهیم کاراکتر دیگری را جایگزین کنیم می توانیم از متد join به جای toString استفاده کنیم.

متد join


کاربرد متد join الحاق تمام عناصر آرایه در رشته متنی با و بدون کاراکتر جداکننده (Separator) است، به طور مثال:
<script>
var array_1 = ['Java', 'Script'];
var array_2 = ['is', 'easy', 'to', 'learn'];
alert(array_1.join('') + ' ' + array_2.join(' ') + '!');
</script>
خروجی این نمونه کد به شکل زیر خواهد بود:
JavaScript is easy to learn!
در صورتی که برای متد join آرگیومنتی درنظر نگیریم به صورت خودکار از کاراکتر کاما (,) برای اتصال عناصر آرایه و تبدیل به رشته متنی استفاده می کند.

متد toLocaleString


متد toLocaleString عناصر آرایه را بر اساس استاندارد ECMAScript که برای کارکرد یکسان جاوا اسکریپت در مرورگرهای مختلف تدوین شده به مقادیر رشته متنی با فرمت محلی (به فرض فرمت نمایش تاریخ و زمان در کشوری خاص) تبدیل می کند، به طور مثال:
<script>
var array_1 = [1, 'a', new Date('11 Apr 2021 16:17:10 UTC')];
var locale_string = array_1.toLocaleString('en', { timeZone: 'UTC' });
console.log(locale_string);
</script>
نتیجه اجرای نمونه کد بالا به شکل زیر در خروجی Console مرورگر نمایش داده می شود:
1,a,4/11/2021, 4:17:10 PM
در صورتی که به جای en مقدار fa قرار دهیم احتمالا تاریخ شمسی و اعداد فارسی خواهند شد.

متد pop


کاربرد متد pop حذف آخرین عنصر از آرایه و برگردان عنصر حذف شده به عنوان نتیجه است، به طور مثال:
<script>
var array_1 = [66, 102, 323, 480];
alert('Last Value is: ' + array_1.pop());
array_1.forEach(function(element, index, array){
    alert('Index ' + index + ' Value is: ' + element);
})
</script>
خروجی این نمونه کد چند پیام است که به صورت زیر و به ترتیب نمایش داده می شوند:
Last Value is: 480
Index 0 Value is: 66
Index 1 Value is: 102
Index 2 Value is: 323
با اجرای متد pop بر روی آرایه array_1 در قسمت دستور alert اول، عنصر آخر با مقادیر 480 حذف شده و در حلقه forEach چاپ نخواهد شد، در حلقه forEach به کمک تابع بازگشتی (Callback) می توانیم به ترتیب در هر دور حلقه به عناصر آرایه دسترسی داشته باشیم.

متد push


متد push برای افزودن یک یا چند عنصر به انتهای آرایه و برگردان تعداد عناصر آن به کار می رود، به طور مثال:
<script>
var array_1 = ['ir', 'com', 'net'];
var count = array_1.push('org', 'info');
alert(count);
</script>
خروجی نمونه کد بالا عدد 5 خواهد بود که تعداد عناصر آرایه array_1 پس از اعمال متد push است.

متد reverse


با متد reverse چینش عناصر آرایه به صورت معکوس تغییر می کند، به طور مثال:
<script>
var array_1 = ['ir', 'com', 'net', 'org', 'info'];
array_1.reverse();
alert(array_1);
</script>
خروجی این نمونه کد به صورت زیر خواهد بود:
info,org,net,com,ir
دقت کنیم این سبک متدها همان آرایه را به صورت درجا (In-place) تغییر می دهند و آرایه جدیدی نمی سازند.

متد shift


متد shift جهت حذف اولین عنصر از آرایه و برگردان آن به عنوان نتیجه کاربرد دارد، به طور مثال:
<script>
var array_1 = ['ir', 'com', 'net', 'org', 'info'];
var first_value = array_1.shift();
alert('First Value is: ' + first_value + ' & array_1 Length is: ' + array_1.length);
</script>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
First Value is: ir & array_1 Length is: 4
با اعمال متد shift عضو اول از آرایه اصلی کم می شود و طول جدید 4 خواهد بود.

متد unshift


متد unshift جهت اضافه کردن یک یا چند مقدار به ابتدای آرایه و برگردان طول آرایه جدید کاربرد دارد، مثال:
<script>
var array_1 = [2, 3, 4, 5];
alert(array_1.unshift(0, 1));
alert(array_1);
</script>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
6
0,1,2,3,4,5
متد unshift به صورت درجا (In-place) بر روی آرایه موثر است.

متد slice


از متد slice برای جداسازی بخشی از عناصر آرایه و تشکیل آرایه جدید بدون تغییر آرایه اصلی استفاده می شود، این متد می تواند یک پارامتر الزامی (نقطه شروع برش) و یک پارامتر اختیاری (نقطه انتهای برش) داشته باشد (عضو آخر شامل آرایه جدید نمی شود)، به طور مثال:
<script>
var array_1 = ['Farvardin', 'Ordibehesht', 'Khordad', 'Tir', 'Mordad'];
var array_2 = array_1.slice(2);
alert(array_2);
var array_3 = array_1.slice(1, 3);
alert(array_3);
</script>
خروجی مثال بالا به شکل زیر خواهد بود:
Khordad,Tir,Mordad
Ordibehesht,Khordad
متد slice تغییری در آرایه اصلی ایجاد نمی کند.

متد splice


متد splice با تغییر عناصر آرایه به سه صورت حذف، جایگزینی و اضافه با در نظر گرفتن ابتدا، تعداد و مقادیر آرایه جدیدی ایجاد می کند، Syntax متد splice به شکل زیر است:
splice(start, deleteCount, item1, item2)
به جز پارامتر start سایر موارد اختیاری هستند، start نقطه شروع اعمال تغییرات در آرایه را مشخص می کند و اگر مقدار در نظر گرفته شده بیش از طول آرایه باشد تغییرات از انتها اعمال می شوند، در این شرایط هیچ عضوی از آرایه حذف یا جایگزین نمی شود و به تعداد آیتم های در نظر گرفته شده به انتهای آرایه اضافه می شود، در صورت در نظر گرفتن مقادیر منفی برای start نقطه شروع مساوی با حاصل تفریق طول آرایه از مثبت شده مقادیر منفی است، به فرض اگر طول آرایه 4 و مقدار start عدد 1- باشد نقطه شروع تغییرات 1-4 یعنی 3 خواهد بود.
پارامتر deleteCount تعداد اعضایی که باید از ابتدای نقطه start حذف یا جایگزین شوند را مشخص می کند، اگر این پارامتر تنظیم نشود یا مقادیر آن برابر یا بیشتر از حاصل تفریق طول آرایه از نقطه شروع باشد تمام عناصر آرایه از نقطه شروع تا پایان حذف می شوند، اگر deleteCount را 0 یا منفی در نظر بگیریم هیچ عضوی حذف نمی شود البته در این حالت حداقل باید یک item در نظر گرفته باشیم.
پارامتر item اعضای جدیدی است که جایگزین یا اضافه می شوند، چند مثال از کاربرد متد splice:
<script>
var array_1 = [43, 70, 19];
array_1.splice(1, 0, 44);
alert(array_1);
array_1.splice(2, -1, 85);
alert(array_1);
array_1.splice(0, 2);
alert(array_1);
array_1.splice(0, 1, 50);
alert(array_1);
</script>
در صورت اجرای نمونه کد بالا نتیجه به صورت چند پیام alert با خروجی زیر خواهد بود:
43,44,70,19
43,44,85,70,19
85,70,19
50,70,19
متد splice آرایه جدید ایجاد و تغییری در آرایه اصلی نمی دهد.

متد sort


کاربرد متد sort چینش صعودی (Ascending، چینش پیش فرض) یا نزولی (Descending) اعضای آرایه با یا بدون استفاده از تابع بازگشتی (Callback) بر اساس حروف الفبا یا بزرگتر کوچکی اعداد است، در صورتی که برای متد sort تابع بازگشتی در نظر گرفته نشود ابتدا اعداد بر مبنای استاندارد یونیکد UTF-16 تبدیل به رشته متنی شده و سپس چینش با بررسی نخستین کاراکتر انجام می شود به این صورت به فرض عدد 12 چون با 1 شروع شده مقدم بر عدد 9 خواهد بود!، چند مثال از نحوه کار متد sort:
<script>
var array_1 = [5, 3, 12, 9];
alert(array_1.sort());
alert(array_1.sort(function(a, b){return a - b;}));
alert(array_1.sort(function(a, b){return b - a;}));
var array_2 = ['B', 'C', 'A', 'D'];
alert(array_2.sort());
alert(array_2.sort(function(a, b){return a - b;}));
alert(array_2.sort(function(a, b){return b - a;}));
</script>
خروجی نمونه کد بالا به صورت چند پیام با مقادیر زیر خواهد بود:
12,3,5,9
3,5,9,12
12,9,5,3
A,B,C,D
D,C,B,A
A,B,C,D
دقت کنیم که استفاده از sort به صورت درجا (In-place) بر روی آرایه موثر است و چینش اعضای آن را تغییر می دهد.

متد copyWithin


متد copyWithin برای کپی قسمتی از عناصر آرایه، انتقال و جایگزینی با قسمتی دیگر بدون تغییر طول آرایه کاربرد دارد، این متد می تواند سه پارامتر با Syntax زیر داشته باشد:
copyWithin(target, start, end)
پارامتر target الزامی است و نقطه جایگزینی را مشخص می کند، اگر target مقدار منفی باشد جایگزینی از آخر اعمال می شود، اگر پارامتر target برابر یا بزرگتر از طول آریه باشد هیچ عنصری کپی و جایگزین نخواهد شد، start نقطه شروع کپی است و اگر مقدار منفی باشد از انتها لحاظ می شود، اگر start در نظر گرفته نشود کپی از ابتدا شروع خواهد شد، end انتهای کپی را مشخص می کند (آخرین عنصر شامل نمی شود) و اگر مقدار منفی باشد یا پارامتر end تنظیم نشود کپی تا انتهای آرایه ادامه پیدا می کند (در این حالت شامل آخرین عنصر می شود)، چند مثال از کاربرد متد copyWithin:
<script>
var array_1 = [1, 2, 3, 4, 5, 6, 7];
alert(array_1.copyWithin(2));
array_1 = [1, 2, 3, 4, 5, 6, 7];
alert(array_1.copyWithin(-2));
array_1 = [1, 2, 3, 4, 5, 6, 7];
alert(array_1.copyWithin(1, 2));
array_1 = [1, 2, 3, 4, 5, 6, 7];
alert(array_1.copyWithin(2, 3, 5));
</script>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
1,2,1,2,3,4,5
1,2,3,4,5,1,2
1,3,4,5,6,7,7
1,2,4,5,5,6,7
متد copyWithin به صورت درجا (In-place) بر روی آرایه موثر است.

متد keys


متد keys آبجکتی از ایندکس ها یا کلیدهای آرایه ایجاد می کند که می توانیم با next و value یا در حلقه for به عناصر آن دسترسی پیدا کنیم (طبق پروتکل های Iteration)، مثال:
<script>
var array_1 = ['JS', 'CSS', 'HTML'];
var iterator_1 = array_1.keys();
alert(iterator_1.next().value);
alert(iterator_1.next().value);
alert(iterator_1.next().value);
for(var key of array_1.keys()){
    alert('Index ' + key + ' Value is: ' + key);
}
</script>
گفتیم تفاوت ایندکس و کلید صرفا در این است که در حالت ایندکس شماره گذاری از 0 و به صورت خودکار انجام می شود، خروجی نمونه کد بالا به صورت زیر خواهد بود:
0
1
2
Index 0 Value is: 0
Index 1 Value is: 1
Index 2 Value is: 2
پروتکل های Iteration قواعدی در زبان های برنامه نویسی جهت تعیین چگونگی مدیریت توالی و تکرار و تجزیه مقادیر در دستوراتی نظیر حلقه for هستند.

متد values


متد values آبجکتی از مقادیر آرایه ایجاد می کند که می توانیم با next و value یا در حلقه for به عناصر آن دسترسی پیدا کنیم (طبق پروتکل های Iteration)، مثال:
<script>
var array_1 = ['JS', 'CSS', 'HTML'];
var iterator_1 = array_1.values();
alert(iterator_1.next().value);
alert(iterator_1.next().value);
alert(iterator_1.next().value);
for(var value of array_1.values()){
    alert('Index ' + array_1.indexOf(value) + ' Value is: ' + value);
}
</script>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
JS
CSS
HTML
Index 0 Value is: JS
Index 1 Value is: CSS
Index 2 Value is: HTML
در خصوص متد indexOf در ادامه همین آموزش توضیح خواهیم داد.

متد entries


متد entries آبجکتی از هر جفت ایندکس یا کلید و مقدار آرایه ایجاد می کند که می توانیم با next و value یا در حلقه for به عناصر آن دسترسی پیدا کنیم (طبق پروتکل های Iteration)، مثال:
<script>
var array_1 = ['JS', 'CSS', 'HTML'];
var iterator_1 = array_1.entries();
alert(iterator_1.next().value);
alert(iterator_1.next().value);
alert(iterator_1.next().value);
for(var[index, element] of array_1.entries()){
    alert('Index ' + index + ' Value is: ' + element);
}
</script>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
0,JS
1,CSS
2,HTML
Index 0 Value is: JS
Index 1 Value is: CSS
Index 2 Value is: HTML
بر مبنای پروتکل های Iteration و در اصطلاح برنامه نویسی به آرایه ها (Array Objects) مقادیر Iterable گفته می شود، در متد Array.from دیدیم که رشته متنی (String) نیز یک مقدار Iterable است.

متد every


از متد every جهت بررسی یک فرآیند مشترک برای هر عضو آرایه به کمک تابع بازگشتی (Callback) استفاده می شود، نتیجه نهایی این متد یکی از مقادیر true یا false خواهد بود، چند مثال از کاربرد متد every:
<script>
var array_1 = [88, 12, 54];
var isUnder100 = (currentValue) => currentValue < 100;
if(array_1.every(isUnder100)){
    alert('Yes, All < 100!');
}else{
    alert('No, Some > 100!');
}
function isUnderEqual50(element, index, array) {
    return element <= 50;
}
if(array_1.every(isUnderEqual50)){
    alert('Yes, All < 50!');
}else{
    alert('No, Some > 50!');
}
</script>
خروجی نمونه کدهای بالا به صورت زیر خواهد بود:
Yes, All < 100!
No, Some > 50!
استفاده از علامت <= یک شیوه تعریف تابع در جاوا اسکریپت است که به آن Arrow function (تابع پیکان) گفته می شود.

متد fill


متد fill مقادیر عناصر تعیین شده در آرایه را با مقدار ثابتی جایگزین می کند، نقطه شروع به صورت پیش فرض ایندکس 0 (اولین عنصر) و نقطه پایان آخرین عنصر (به طول آرایه) است و در صورت عدم تعیین این پارامترها جایگزینی شامل اولین تا آخرین عنصر می شود و در صورتی که آخرین عنصر تعیین شود شامل آن نمی شود، Syntax متد fill به شکل زیر است که دو پارامتر start و end اختیاری هستند:
fill(value, start, end)
اگر پارامتر start مقدار منفی باشد نقطه شروع برابر با حاصل جمع طول آرایه + مقدار start خواهد بود، اگر هم پارامتر end مقدار منفی باشد نقطه پایان برابر با حاصل جمع طول آرایه + مقدار end خواهد بود، چند مثال از کاربرد متد fill:
<script>
var array_1 = [2, 4, 8, 16];
array_1.fill(0, 2);
alert(array_1);
array_1 = [2, 4, 8, 16];
array_1.fill(0, 0, 4);
alert(array_1);
array_1 = ['ir', 'com', 'net', 'org'];
array_1.fill('ir', 1);
alert(array_1);
array_1 = ['ir', 'com', 'net', 'org'];
array_1.fill('ir', 1, 3);
alert(array_1);
</script>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
2,4,0,0
0,0,0,0
ir,ir,ir,ir
ir,ir,ir,org
اعمال تغییرات متد fill به صورت درجا (In-place) است و آرایه را در ادامه کدها تغییر می دهد.

متد some


متد some با یک تابع بازگشتی (Callback) عناصر آرایه را مورد به مورد بررسی و در صورتی که حداقل یک مورد از آنها بر اساس بررسی تابع بازگشتی نتیجه true داشته باشد، نتیجه نهایی را به شکل true یا در غیر اینصورت (هیچ کدام از عناصر آرایه واجد شرایط بررسی تابع بازگشتی نباشند) نتیجه نهایی را false برمی گرداند، مثالی از کاربرد متد some:
<script>
function checkNumber(element, index, array){
    return element === 4;
}
var array_1 = [1, 4, 3, 5];
alert(array_1.some(checkNumber));
</script>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
true
مقادیر 4 در آرایه وجود دارد و لذا حداقل یک بررسی در تابع بازگشتی true است.

متد find


متد find با یک تابع بازگشتی (Callback) مورد به مورد عناصر آرایه را بررسی و مقادیر اولین عنصری که نتیجه پردازش آن در تابع true باشد را برمی گرداند، در صورتی که هیچ کدام از عناصر آرایه نتوانند در بررسی تابع بازگشتی نتیجه true داشته باشند متد find آبجکت undefined (تعریف نشده) را به عنوان خروجی نهایی برمی گرداند، مثال:
<script>
function checkNumber(element, index, array){
    return element === 4;
}
var array_1 = [0, 2, 3, 5];
alert(array_1.find(checkNumber));
var array_1 = [0, 2, 4, 5];
alert(array_1.find(checkNumber));
</script>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
undefined
4
در بررسی اول چون هیچ مقداری برابر 4 نیست undefined برگردانده می شود اما در بررسی دوم مقادیر 4 با توجه به بررسی تابع بازگشتی توسط متد find و وجود این مقدار در ایندکس سوم آرایه برگردانده می شود.

 متد findIndex


متد findIndex با یک تابع بازگشتی (Callback) مورد به مورد عناصر آرایه را بررسی و در هر نقطه که تابع نتیجه true برگرداند شماره ایندکس یا کلید را خروجی می دهد، به طور مثال:
<script>
var array_1 = [50, 45, 106, 70];
var isLargeNumber = (element) => element > 100;
alert(array_1.findIndex(isLargeNumber));
function checkOddNumber(element, index, array){
    return element % 2;
}
alert(array_1.findIndex(checkOddNumber));
</script>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
2
1
در نمونه کد اول عدد 106 ایندکس 2 آرایه (شمارش از 0) بزرگتر از 100 است، در نمونه کد دوم ایندکس 1 یعنی عدد 45 فرد (Odd فرد و Even زوج) است.

متد indexOf


متد indexOf اولین موقعیت یک مقدار را در عناصر آرایه بررسی و شماره ایندکس مربوطه را به عنوان نتیجه برمی گرداند، اگر مقدار مورد نظر در آرایه پیدا نشود متد indexOf نتیجه را 1- برمی گرداند، در صورتی که پارامتر دوم برای متد indexOf در نظر گرفته نشود بررسی از ابتدای آرایه اعمال می شود اما اگر پارامتر دوم را برای این متد در نظر بگیریم شروع بررسی از نقطه تعیین شده خواهد بود، مثال:
<script>
var array_1 = [1, 2, 3, 1, 5, 2];
alert(array_1.indexOf(2));
alert(array_1.indexOf(2, 3));
</script>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
1
5
در حالت اول آرگیومنت دوم تنظیم نشده و بررسی اولین موقعیت مقدار 2 در آرایه array_1 ایندکس 1 خواهد بود، در حالت دوم بررسی از ایندکس سوم شروع شده (عدد 1 دوم) و موقعیت ایندکس 5 برای مقدار 2 برگردانده می شود.

متد lastIndexOf


متد lastIndexOf آخرین موقعیت یک مقدار را در عناصر آرایه بررسی و شماره ایندکس مربوطه را به عنوان نتیجه برمی گرداند، اگر مقدار مورد نظر در آرایه پیدا نشود متد lastIndexOf نتیجه را 1- برمی گرداند، در صورتی که پارامتر دوم برای متد lastIndexOf در نظر گرفته نشود بررسی از ابتدای آرایه اعمال می شود اما اگر پارامتر دوم را برای این متد در نظر بگیریم شروع بررسی از نقطه تعیین شده به صورت انتها به ابتدا (Backwards) خواهد بود، مثال:
<script>
var array_1 = [1, 2, 3, 1, 5, 2];
alert(array_1.lastIndexOf(2));
alert(array_1.lastIndexOf(2, 2));
</script>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
5
1
در حالت اول آرگیومنت دوم تنظیم نشده و بررسی آخرین موقعیت مقدار 2 در آرایه array_1 ایندکس 5 خواهد بود، در حالت دوم بررسی به صورت انتها به ابتدا (Backwards) از ایندکس سوم شروع شده (عدد 1 دوم) و موقعیت کلید 1 برای مقدار 2 برگردانده می شود.

 متد flat


متد flat آرایه های چند بعدی را تا سطح تعیین شده به آرایه ای با بعد کمتر تبدیل می کند، اگر هیچ سطحی به عنوان آرگیومنت در نظر گرفته نشود کاهش سطح تا تک بعدی شدن عناصر آرایه ادامه پیدا می کند، مثال:
<script>
var array_1 = [111, 222, [1, 2]];
console.log(array_1.flat());
var array_1 = [111, 222, [[1, 2]]];
console.log(array_1.flat(1));
</script>
خروجی نمونه کدهای بالا در Console مرورگر به صورت زیر خواهد بود:
[111, 222, 1, 2]
[111, 222, [1, 2]]
برای دسترسی به قسمت Console مرورگرها می توانیم دکمه F12 را فشرده یا از قسمت Developer به این امکان دسترسی پیدا کنیم.

متد map


متد map با یک تابع بازگشتی (Callback) مورد به مورد پردازش تعیین شده را بر روی عناصر آرایه اجرا و در نهایت خروجی را به شکل آرایه جدید برمی گرداند، مثال:
<script>
var array_1 = [1, 2, 3, 4];
function addToNumber(element, index, array){
    return element + 5;
}
alert(array_1.map(addToNumber));
alert(array_1);
</script>
خروجی نمونه کد بالا به صورت زیر خواهد بود:
6,7,8,9
1,2,3,4
هر عضو آرایه در تابع بازگشتی با عدد 5 جمع و نتیجه به صورت آرایه جدید خروجی داده می شود (متد map بر روی آرایه اصلی تاثیری ندارد).

 متد flatMap


متد flatMap با یک تابع بازگشتی (Callback) پردازش های مد نظر را بر روی مورد به مورد عناصر آرایه انجام داده و در صورت در نظر گرفتن الگوی قلاب [] عناصر آرایه  را به آرایه ای با بعد بیشتر تبدیل و در نهایت به شکل آرایه جدید برمی گرداند، مثال:
<script>
var array_1 = [1, 2, 3];
function addToNumber(currentValue, index, array){
        return [[currentValue], currentValue + 5];
}
console.log(array_1.flatMap(addToNumber));
</script>
خروجی نمونه کد بالا به شکل آرایه ای با ساختار زیر خواهد بود:
[[1], 6, [2], 7, [3], 8]
برای دسترسی به قسمت Console مرورگرها می توانیم دکمه F12 را فشرده یا از قسمت Developer به این امکان دسترسی پیدا کنیم.

 متد filter


 متد filter با یک تابع بازگشتی (Callback) مورد به مورد عناصر آرایه را بررسی کرده و در نهایت آرایه ای جدید از عناصری می سازد که نتیجه بررسی آنها در تابع بازگشتی true برگردانده شود، به طور مثال:
<script>
var array_1 = [1, 2, 3, 4];
function checkOddNumber(element, index, array){
    return element % 2;
}
alert(array_1.filter(checkOddNumber));
</script>
نتیجه نمونه کد بالا به شکل زیر در خروجی نمایش داده می شود:
1,3
با توجه به تابع بازگشتی checkOddNumber مقادیری از آرایه array_1 که فرد هستند به صورت یک آرایه جدید با متد filter استخراج می شوند.

متد reduce


متد reduce مورد به مورد عناصر آرایه را از تابعی بازگشتی (Callback) با قابلیت reduce عبور داده و در نهایت نتیجه کلی عملیات تابع را برمی گرداند، reduce تابعی است که در آن وضعیت قبلی اجرای تابع برای دور جاری نگهداری شده و در دسترس است، هر تابع reduce در جاوا اسکریپت می تواند چهار آرگیومنت به شرح زیر داشته باشد:
- Accumulator: مقادیر به دست آمده از اجراهای قبلی تابع (در صورتی که اولین فراخوانی باشد مقادیر ایندکس 0).
- Current Value: مقادیری که در حال حاضر پردازش می شود (در صورتی که اولین فراخوانی باشد مقادیر ایندکس 1).
- Current Index: شماره ایندکسی که در حال حاضر پردازش می شود (در صورتی که اولین فراخوانی باشد شماره ایندکس 1).
- Source Array: آرایه ای که در حال پردازش عناصر آن هستیم.
دو پارامتر Accumulator و Current Value برای اجرای متد reduce الزامی هستند، مثالی از کاربرد این متد:
<script>
var array_1 = [0, 1, 2, 3, 4];
function addToNumbers(accumulator, current_value){
    return accumulator + current_value;
}
alert(array_1.reduce(addToNumbers));
var array_1 = [0, 1, 2, 3, 4];
function subFromNumbers(accumulator, current_value){
    return accumulator - current_value;
}
alert(array_1.reduce(subFromNumbers));
</script>
نتیجه اجرای نمونه کدهای بالا اعداد زیر خواهند بود:
10
-10
در حالت اول در دور 1 مقادیر accumulator 0 و current_value 1 است، نتیجه 1 خواهد بود، در دور 2 مقادیر accumulator 1 و current_value 2 است، نتیجه 3 خواهد بود، در دور 3 مقادیر accumulator 3 و current_value 3 است، نتیجه 6 خواهد بود، در دور 4 مقادیر accumulator 6 و current_value 4 است، نتیجه نهایی 10 خواهد بود، برای حالت دوم همین روند به صورت منها اتفاق می افتد و نتیجه نهایی عدد منفی 10 خواهد بود.
نکته: اختلاف accumulator و current_value در صورتی است که برای accumulator هیچ مقدار پیش فرضی تعیین نشده باشد، در غیر اینصورت هر دو از ایندکس 0 شروع می شوند، به فرض:
<script>
var array_1 = [0, 1, 2, 3, 4];
alert(array_1.reduce(function(accumulator, current_value){
    return accumulator + current_value;
}, 5));
</script>
تفسیر قسمت return این کد به زبان ساده:
5+0, 5+1, 2+6, 3+8, 4+11
که نتیجه در این حالت در آخرین دور 15 خواهد بود.

متد reduceRight


متد reduceRight مقادیر Accumulator و Current Value یک آرایه را از سمت راست به چپ از فیلتر تابع بازگشتی (Callback) عبور داده و در نهایت نتیجه کلی عملیات تابع را برمی گرداند، مثالی از کاربرد متد reduceRight:
<script>
var array_1 = [1, 2, 3, 4];
var array_2 = [];
var result;
function makeNewArray(accumulator, current_value, current_index, array_1){
    result = accumulator + current_value;
    array_2[current_index] = result;
    return result;
}
array_1.reduceRight(makeNewArray);
alert(array_2);
</script>
نتیجه اجرای نمونه کد بالا به صورت زیر خواهد بود:
[10,9,7]
با درک متد reduce تفسیر این نمونه کد که مبتنی بر متد reduceRight است ساده می شود:
ابتدا در دور اول با توجه به انتخاب عناصر آرایه از سمت راست accumulator 4، current_value 3 و 2 current_index است، در نتیجه ایندکس 2 آرایه array_2 مقدار 7 خواهد بود، در دور دوم accumulator 7، current_value 2 و 1 current_index است، در نتیجه ایندکس 1 آرایه array_2 مقدار 9 خواهد بود، در دور سوم accumulator 9، current_value 1 و 0 current_index است، در نتیجه ایندکس 0 آرایه array_2 مقدار 10 خواهد بود.
دسته بندی: آموزش مقدماتی » JavaScript
related مطالب بیشتر:
دستورات شرطی (Conditional Statements) در جاوا اسکریپت (JavaScript)
آرایه (Array) در جاوا اسکریپت (JavaScript)
شروعی بر برنامه نویسی جاوا اسکریپت (JavaScript)
رویدادها (Events) در جاوا اسکریپت (JavaScript)
کار با پنجره Pop-up در جاوا اسکریپت (JavaScript)
دیدگاه
more ۴ دیدگاه برای این مطلب ارسال شده است.
more دیدگاه جدید بر اساس تاریخ ارسال در انتهای دیدگاه های موجود نمایش داده می شود.
محمدرضا زال آقائی
۲۱:۴۸ ۱۴۰۰/۰۷/۱۴
سلام
دنبال یه اسکریپتی هستم که بتونم باهاش یه متنی رو یا یه باکسی رو یا یه پلیری رو فقط برای افرادی که با اپلیکیشن سایتم میان نمایش بدم... برای دسکتاپ و گوشی نشون نده
با توجه به چند مرحله ای بودن کار (اپلیکیشن، سمت سرور) متاسفانه اسکریپت آماده ای برای این کار در اختیار نداریم، در تئوری می توانیم یک کد یکتا در اپلیکیشن ایجاد و در دیتابیس سایت ذخیره کنیم، این کد را به همراه آدرس URL ارسال و با متد GET در سمت سرور دریافت و اعتبارسنجی می کنیم.
محمدرضا زال آقائی
۲۱:۴۵ ۱۴۰۰/۰۷/۱۵
البته من یادم رفت که بگم اپلیکیشن داره نسخه سایت رو نشون میده توی خودش در واقع مثه مرورگر گوشیه ولی در قالب یه اپلیکیشن باز هم مراحل بالا باید طی بشه
بله، البته با بررسی اطلاعات User Agent مرورگر کاربر هم انجام این کار ممکن است اما به اندازه روش کد یکتا قابل اعتماد نیست.
محمدرضا زال آقائی
۲۳:۳۴ ۱۴۰۰/۰۷/۱۶
نمیشه با
@media
یه استایل براش تعریف کرد که فقط توی گوشی باز شه؟ اپلیکیشن هم نشد نشد یه div خاص فقط توی گوشی نشون داده بشه
بله، یک div با آی دی یکتا تعریف کنید به فرض:
<div id="just-mobile"></div>
در استایل CSS اصلی display را none تنظیم کنید:
#just-mobile {
display: none;
}
اما با media استایل متفاوت در نظر بگیرید:
@media screen and (max-width: 360px) {
#just-mobile {
display: block;
}
}
دقت کنید این استایل بر اساس عرض viweport عمل می کند یعنی حتی اگر پنجره مرورگر دستکتاپ را هم کوچک کنید div نمایش داده می شود.
حسین بلاگ
۱۷:۵۴ ۱۴۰۳/۰۱/۱۹
من یه صفحه ارسال متن دارم میخوام کاربرها وقتی واسه م پیام میدن
وقتی روی اون دکمه کلیک می کنن بهشون بگه لطفا صبر کنید
با تشکر
اگر منظورتان نمایش پیام انتظار تا زمان ارسال پیام و دریافت نتیجه است ایجاد این امکان راه حل کوتاهی ندارد و باید ساختار برنامه نویسی فرم ارسال پیام با زبان Ajax بازنویسی شود که تخصصی و زمانبر است، این در شرایطی است که از وبلاگ شخصی (هاست و دامنه شخصی) استفاده کنید، در سرویس های رایگان وبلاگی متاسفانه این کار شدنی نیست.
more لطفا پیش از ارسال دیدگاه نکات زیر را مد نظر داشته باشید:
- به سوالات کلی، زمانبر، مبهم و مشکلاتی که تلاشی برای رفع آنها نکرده باشید پاسخ مختصر داده شده یا به بخش برنامه نویسی اختصاصی ارجاع داده می شوند.
- کدها و اسکریپت های طولانی را ترجیحا در یک صفحه وب آنلاین یا به صورت حساب موقت و آزمایشی قرار دهید تا امکان بررسی دقیق مشکل و خطایابی میسر باشد.
- تمام دیدگاه های ارسالی خوانده شده و برای هر کاربر مدت زمان لازم جهت پاسخگویی در نظر گرفته می شود، لطفا از طرح سوالات متعدد در بازه زمانی کوتاه خودداری کنید.



 refresh
10 × 10
4 × 8
20 × 20
=
آخرین دیدگاه ها
more برای دسترسی سریع به یادداشت مربوطه می توانید از لینک مطلب در کادر زیر استفاده کنید.
سیدعباسی
با تشکر از شما استاد من مشکل خودم رو بصورت زیر حل کردم تغییر بدید چون وقتی کدهارو می نویسیم مشخص نیست...
۱۴۰۳/۰۸/۱۹

سیدعباسی
با سلام و تشکر از شما دست شما درد نکنه مشکل این کد چیه؟ کار نمی کنه
۱۴۰۳/۰۸/۱۶

سیدعباسی
با سلام و خسته نباشید واسه حذف کپی رایت نمی خوام واسه لینک های خودم میخوام که تابعش رو داشته باشم بصورت عادی لینکها...
۱۴۰۳/۰۸/۱۴

سیدعباسی
با تشکر از شما درست شد ببخشید یه سوال دیگه هم دارم چطور می تونم لینک یک مطلب رو پیدا کنم بعد بگم اگه...
۱۴۰۳/۰۸/۱۳

سیدعباسی
ببخشید کد قبلی اشتباه بود دقت نکرده بودم شرمنده کد اصلاح شده اینه می خوام در انتها همه ی برچسب هارو داشته باشم با...
۱۴۰۳/۰۸/۱۰

سیدعباسی
با سلام خسته نباشی من از این تابع برای استخراج برچسب های سایتم استفاده می کنم تنها مشکلی که این تابع داره اینکه...
۱۴۰۳/۰۸/۰۹

سیدعباسی
با تشکر از شما مشکلم حل شد خیلی ممنون از شما یه سوال دیگه هم دارم البته ببخشید من یه textarea دارم...
۱۴۰۳/۰۸/۰۶

سیدعباسی
با سلام ببخشید هی مزاحمتون میشم من یه پلاگین دارم برای خروجی گرفتن از sitemap لینکهایی که برام خروجی می گیره از بالا به...
۱۴۰۳/۰۸/۰۵

سیدعباسی
با تشکر از شما دوست عزیز خیلی خوب بود یه سوال دیگه هم دارم البته ببخشید وقتی از سایت مپ خروجی میگیریم؟ که لینکها رو...
۱۴۰۳/۰۸/۰۴

سیدعباسی
با تشکر از شما استاد خیلی خوب بود من میخوام فقط آخرین لینک رو بصورت خروجی داشته باشم که شامل post باشه یعنی فقط این...
۱۴۰۳/۰۷/۲۸

سیدعباسی
برای کدی که فرستادم من از این الگو استفاده می کنم میخواهم از لینکهایی شروع کنه که شامل عدد باشن و آدرس سایت به...
۱۴۰۳/۰۷/۲۸

سیدعباسی
با سلام و خسته نباشید من میخوام از سایت مپ زیر لینک اول که شامل post است رو استخراج کنم یعنی خروجی من این نباشه...
۱۴۰۳/۰۷/۲۸

سیدعباسی
با سلام من میخوام از متن زیر لینکش رو دربیارم و در آخر مقدار 3088 رو بصورت خروجی نهایی داشته باشم با...
۱۴۰۳/۰۷/۰۷
  در انتظار بررسی: ۲
 پاسخگویی به سوالات ممکن است تا ۲۴ ساعت زمان ببرد.