JavaScript – مرتبسازی آرایهها (Array Sort)
آخرین بروزرسانی:
مرتبسازی آرایهها در جاوااسکریپت (JavaScript Sorting Arrays)
متدهای مرتبسازی آرایه
- مرتبسازی الفبایی (Alphabetic Sort):
sort()
: متدی برای مرتبسازی آرایه به صورت الفبایی.reverse()
: متدی برای برعکس کردن ترتیب عناصر آرایه.toSorted()
(از ES2023): متدی برای مرتبسازی آرایه بدون تغییر آرایه اصلی.toReversed()
(از ES2023): متدی برای برعکس کردن ترتیب آرایه بدون تغییر آرایه اصلی.
مرتبسازی اشیاء (Sorting Objects)
- مرتبسازی بر اساس مقادیر عددی یا رشتهای موجود در اشیاء.
سینتکس (Syntax) و مثالها
مرتبسازی آرایه با sort()
این متد آرایه را به صورت الفبایی مرتب میکند:
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
برعکس کردن آرایه با reverse()
این متد عناصر آرایه را برعکس میکند:
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.reverse();
ترکیب sort()
و reverse()
برای مرتبسازی نزولی میتوان از ترکیب این دو متد استفاده کرد:
const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();
fruits.reverse();
متد toSorted()
(جدید در ES2023)
این متد یک نسخه مرتبشده از آرایه ایجاد میکند و آرایه اصلی را تغییر نمیدهد:
const months = ["Jan", "Feb", "Mar", "Apr"];
const sorted = months.toSorted();
متد toReversed()
(جدید در ES2023)
این متد یک نسخه برعکسشده از آرایه ایجاد میکند و آرایه اصلی را تغییر نمیدهد:
const months = ["Jan", "Feb", "Mar", "Apr"];
const reversed = months.toReversed();
مرتبسازی عددی (Numeric Sort)
مشکل مرتبسازی پیشفرض
متد sort()
به صورت پیشفرض مقادیر را به عنوان رشته مرتب میکند:
const points = [40, 100, 1, 5, 25, 10];
points.sort();
// نتیجه: [1, 10, 100, 25, 40, 5]
راهحل: استفاده از تابع مقایسه (Compare Function)
برای مرتبسازی عددی صحیح، تابع مقایسه را مشخص کنید:
const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b) { return a - b });
// مرتبسازی صعودی
points.sort(function(a, b) { return b - a });
// مرتبسازی نزولی
مرتبسازی تصادفی (Random Sort)
میتوانید یک آرایه را به صورت تصادفی مرتب کنید:
const points = [40, 100, 1, 5, 25, 10];
points.sort(function() { return 0.5 - Math.random() });
روش Fisher Yates
یک روش دقیقتر برای مرتبسازی تصادفی:
const points = [40, 100, 1, 5, 25, 10];
for (let i = points.length - 1; i > 0; i--) {
let j = Math.floor(Math.random() * (i + 1));
[points[i], points[j]] = [points[j], points[i]];
}
یافتن مقادیر بیشینه و کمینه
با استفاده از Math.min()
و Math.max()
function myArrayMin(arr) {
return Math.min.apply(null, arr);
}
function myArrayMax(arr) {
return Math.max.apply(null, arr);
}
با متد دستی (Home-made Method)
function myArrayMin(arr) {
let min = Infinity;
for (let num of arr) {
if (num < min) min = num;
}
return min;
}
function myArrayMax(arr) {
let max = -Infinity;
for (let num of arr) {
if (num > max) max = num;
}
return max;
}
مرتبسازی آرایههای اشیاء
مرتبسازی عددی
مرتبسازی اشیاء بر اساس مقدار یک خاصیت عددی:
const cars = [
{ type: "Volvo", year: 2016 },
{ type: "Saab", year: 2001 },
{ type: "BMW", year: 2010 }
];
cars.sort(function(a, b) { return a.year - b.year });
مرتبسازی رشتهای
مرتبسازی اشیاء بر اساس مقدار یک خاصیت رشتهای:
cars.sort(function(a, b) {
let x = a.type.toLowerCase();
let y = b.type.toLowerCase();
return x < y ? -1 : x > y ? 1 : 0;
});
مرتبسازی پایدار (Stable Sort)
از ES2019 به بعد، مرتبسازی آرایهها در جاوااسکریپت پایدار شده است:
const myArr = [
{ name: "X00", price: 100 },
{ name: "X01", price: 100 },
{ name: "X02", price: 100 },
{ name: "X03", price: 100 },
{ name: "X04", price: 110 },
{ name: "X05", price: 110 },
{ name: "X06", price: 110 },
{ name: "X07", price: 110 }
];
myArr.sort((a, b) => a.price - b.price);
برای ارسال نظر لطفا ابتدا وارد حساب کاربری خود شوید. صفحه ورود و ثبت نام