با عرض سلام خدمت کاربران محترم سایت پی وی لرن.
در این جلسه قصد داریم تا به مرتب سازی آرایه ها در جاوا اسکریپت JavaScript شامل مرتب سازی آرایه ها بر اساس حروف الفبا ، معکوس کردن آرایه در جاوا اسکریپت ، تابع مقایسه در جاوا اسکریپت و … بپردازیم.
جاوا اسکریپت JavaScript توابع مختلفی را برای مرتب سازی آرایه ها در اختیار توسعه دهندگان گذاشته است.
برای مرتب سازی آرایه ها بر اساس حروف الفبا در جاوا اسکریپت از تابع ()sort استفاده می کنیم:
1 2 | var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort(); // Sorts the elements of fruits |
برای معکوس کردن آرایه در جاوا اسکریپت از تابع ()reverse استفاده می کنیم:
1 2 3 | var fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort(); // First sort the elements of fruits fruits.reverse(); // Then reverse the order of the elements |
نتیجه به شکل زیر خواهد بود:
1 | Orange,Mango,Banana,Apple |
تابع ()sort مقادیر را به صورت پیش فرض به عنوان رشته مرتب می کند.
این تابع برای رشته ها به خوبی عمل می کند.
اما این تابع برای مقادیر عددی به درستی کار نخواهد کرد. برای مثال عدد ۲ را بزرگتر از ۱۲ تشخیص می دهد زیرا ۲ از ۱ بزرگتر است.
برای حل این مشکل باید از یک تابع مقایشه استفاده کنیم:
1 2 | var points = [40, 100, 1, 5, 25, 10]; points.sort(function(a, b){return a - b}); |
نتیجه به شکل زیر خواهد بود:
1 | 1,5,10,25,40,100 |
مثالی دیگر:
1 2 | var points = [40, 100, 1, 5, 25, 10]; points.sort(function(a, b){return b - a}); |
نتیجه به شکل زیر خواهد بود:
1 | 100,40,25,10,5,1 |
هدف تابع مقایسه در جاوا اسکریپت تعریف یک دستور مرتب سازی جایگزین می باشد.
این تابع باید یک مقدار منفی، ۰ یا مثبت را بسته به آرگومان هایش برگشت دهد:
1 | function(a, b){return a-b} |
وقتی تابع ()sort دو مقدار را مقایسه می کند، این دو مقدار را به تابع مقایسه ارسال می کند و مقادیر را بر اساس مقدار برگشنی (منفی، صفر یا مثبت) مرتب می کند.
بگذارید برای درک بیشتر یک مثال بزنیم:
وقتی که ۴۰ و ۱۰۰ با هم مقایسه می شوند، تابع sort تابع (function(40, 100 را فرا می خواند.
تابع مقایسه نتیجه ۱۰۰-۴۰ را برگشت می دهد (۶۰-)
تابع sort مقدار ۴۰ را به عنوان مقداری کمتر از ۱۰۰ مرتب می کند.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | <button onclick="myFunction1()">Sort Alphabetically</button> <button onclick="myFunction2()">Sort Numerically</button> <p id="demo"></p> <script> var points = [40, 100, 1, 5, 25, 10]; document.getElementById("demo").innerHTML = points; function myFunction1() { points.sort(); document.getElementById("demo").innerHTML = points; } function myFunction2() { points.sort(function(a, b){return a - b}); document.getElementById("demo").innerHTML = points; } </script> |
1 2 | var points = [40, 100, 1, 5, 25, 10]; points.sort(function(a, b){return 0.5 - Math.random()}); |
هیچ تابع از پیش ساخته ای برای پیدا کردن ماکزیمم یا مینیمم مقدار آرایه در جاوا اسکریپت وجود ندارد.
برای این کار می توانید وقتی که آرایه را مرتب کردید، از اندیس برای پیدا کردن بیشترین یا کمترین مقدار آرایه استفاده کنید:
1 2 3 4 | var points = [40, 100, 1, 5, 25, 10]; points.sort(function(a, b){return a - b}); // now points[0] contains the lowest value // and points[points.length-1] contains the highest value |
1 2 3 4 | var points = [40, 100, 1, 5, 25, 10]; points.sort(function(a, b){return b - a}); // now points[0] contains the highest value // and points[points.length-1] contains the lowest value |
نکته : اگر فقط می خواهید بالاترین (یا کمترین) مقدار را پیدا کنید مرتب کردن آرایه کل یک روش بسیار ناکارآمد است.
1 2 3 | function myArrayMax(arr) { return Math.max.apply(null, arr); } |
1 2 3 | function myArrayMin(arr) { return Math.min.apply(null, arr); } |
کافیست تا آرایه را به عنوان پارامتر به این تابع ارسال کنید.
سریعترین راه استفاده از یک متد “home made” است.
این تابع با استفاده از یک آرایه با مقایسه هر مقدار ، بالاترین مقدار را پیدا می کند:
1 2 3 4 5 6 7 8 9 10 | function myArrayMax(arr) { var len = arr.length var max = -Infinity; while (len--) { if (arr[len] > max) { max = arr[len]; } } return max; } |
این تابع از طریق یک آرایه با مقایسه هر مقدار با کمترین مقدار یافت می شود.
1 2 3 4 5 6 7 8 9 10 | function myArrayMin(arr) { var len = arr.length var min = Infinity; while (len--) { if (arr[len] < min) { min = arr[len]; } } return min; } |
آرایه های جاوا اسکریپت اغلب دارای اشیا هستند:
1 2 3 4 5 | var cars = [ {type:"Volvo", year:2016}, {type:"Saab", year:2001}, {type:"BMW", year:2010} ]; |
حتی اگر اشیاء دارای خواص انواع داده های مختلف باشند، برای مرتب کردن آرایه می توان از متد ()sort استفاده کرد.
راه حل این است که یک تابع مقایسه را برای مقایسه مقادیر خصوصیت بنویسیم:
مقایسه خصوصیات string کمی پیچیده تر است :
1 2 3 4 5 6 7 | cars.sort(function(a, b){ var x = a.type.toLowerCase(); var y = b.type.toLowerCase(); if (x < y) {return -1;} if (x > y) {return 1;} return 0; }); |
جلسه مرتب سازی آرایه ها در جاوا اسکریپت JavaScript نیز به پایان رسید.
در جلسه بعد به مبحث تاریخ و رمان در جاوا اسکریپت خواهیم پرداخت. با ما همراه باشید
melika
سلام خسته نباشید.
من تو کدم یک جدول دارم اسم و فامیل و نمره یک سری دانش اموزه ک با کلیک روی هر هدری میاد بر اساس حروف الفبا سوت میکنه و با انگولار جی اس نوشتم.
ولی مشکلی ک دارم حروف گ چ پ ژ ساپورت نمیشن و اونارو میبره اخر لیست.
اگر کمکم کنید بتونم مشکلمو حل کننم ممنونتون میشم.
سحر
سلام خسته نباشید من این کدو نوشتم اما اجرا نمیده باید چیکار کنم
function revNum()
{
var number = prompt(“Please enter the number which needs to be to be reveresed :”, ” “);
var i= number;
var ret = new Array;
for(var i =ret.length-1; i> 0; i++) {
ret .push(input[i]);
}
document.write(“The original input number is : ” +number+ ” The reverse of input number is : ” +ret+ “\n”);
return ret;
}
صادق
سلام. دقیقا چه خطایی میده؟ درضمن شما باید جلوی new Array پرانتز هم بذارید. به این شکل: ;()new Array
erfan
با عرض سلام و وقت بخیر.
اگر امکانش هست مرتب سازی ارایه ها بر اساس پراپرتی های نوع رشته ای بیشتر توضیحش بدین نامفهومه.
ممنون از اموزش های خوبتون.
صادق
سلام. برای رشته ها هم از همون تابع ()sort استفاده کنید. مرتب سازی بر اساس حروف الفبا خواهد بود. برای مثال اولین حرف کلمه ها رو چک می کنه. اگر دو کلمه در اون حرف یکسان باشند، حرف بهدیشون رو چک می کنه.
اگه دنبال شخصی سازی بیشتری هستید، بهتره از همون مرتب سازی به روش آبجکت ها استفاده کنیدو و شروط رو در تابع تعریف کنید.
erfan
با اختلاف عالی هستین
ممنون از آموزش های خوبتون وراهنماییاتون