مرتب سازی آرایه پایه و پیشرفته
مرتب کردن یک آرایه با یک مقدار نسبتاً ساده است زیرا تابع مقایسه ای که به مرتب سازی آرایه ارسال می شود از این قانون پیروی می کند تا ترتیب مرتب سازی را بر اساس موارد زیر اعمال کند:
ارزش برگشتی | ترتیب مرتب سازی |
---|---|
منفی | کمتر (مرتب کردن a قبل از z ) |
صفر | برابر (حفظ نظم اصلی a و z ) |
مثبت | بزرگتر (مرتب کردن z قبل از a ) |
با در نظر گرفتن این موضوع، بسته به نوع داده، رویکردهای متفاوتی وجود دارد.
رشته
شما می توانید استفاده کنید .sort()
بدون پارامتر برای مرتب کردن رشته ها، اما توصیه می شود از localeCompare استفاده کنید زیرا می توان آن را طوری پیکربندی کرد که علائم نقطه گذاری (لهجه ها) را نادیده بگیرد، برمی گرداند. -1
، 0
، 1
اگر a < z
، a == z
، a > z
.
const animals = [ 'cat', 'dog', 'wolf', 'lion', 'sheep', 'antelope']
animals.sort((a, z) => a.localeCompare(z))
console.log(animals) // [ 'antelope', 'cat', 'dog', 'lion', 'sheep', 'wolf' ]
عددی
تفریق روی فیلدهای عددی کار می کند، زیرا a - z
می دهد -
، 0
، +
اگر a < z
، a == z
، a > z
.
let numbers = [ 0, 20, 2, 3, 30, 10, 1 ]
numbers.sort((a, z) => a - z)
console.log(numbers) //[ 0, 1, 2, 3, 10, 20, 30 ]
تاریخ
تاریخ (با یا بدون زمان) با تفریق مقایسه می شود زیرا ریاضیات تاریخ از سال 1970 به میلی ثانیه تبدیل می شود.
const dates = ['Mar 18 2016', '09/24/2017', 'Jan 22 2022', '1998-05-21']
dates.sort((a, z) => new Date(a) - new Date(z))
console.log(dates) // [ '1998-05-21', 'Mar 18 2016', '09/24/2017', 'Jan 22 2022' ]
بولی
مقایسه بولی با تفریق، که تضمین شده است true
و false
به 1
و 0
(بنابراین تفریق تولید می کند -1
یا 0
یا 1
).
const boolean = [true, false, true, false, true]
boolean.sort((a, z) => Boolean(a) - Boolean(z))
console.log(Boolean) //[ false, false, true, true, true ]
جلب توجه با
Boolean()
سازنده، حتی اگر آنها از قبل Boolean باشند.
به صورت برعکس
مبادله مقادیر مقایسه
animals.sort((a, z) => z.localeCompare(a))
numbers.sort((a, z) => z - a)
dates.sort((a, z) => new Date(z) - new Date(a))
boolean.sort((a, z) => Boolean(z) - Boolean(a))
یا مقایسه را نفی کنید
ترفند نفی را در نظر داشته باشید زیرا می تواند بعدا مفید باشد
animals. Sort((a, z) => -( a.localeCompare(z) ))
numbers.sort((a, z) => -( a - z ))
dates.sort((a, z) => -( new Date(a) - new Date(z) ))
boolean.sort((a, z) => -( Boolean(a) - Boolean(z) ))
ترفند نفی را در نظر داشته باشید زیرا می تواند بعداً برای مرتب سازی پیشرفته مفید باشد
برای مرتبسازی آرایهای از اشیا، از تمام مثالهای قبلی استفاده میکنیم، اما اگر نیاز به مرتبسازی با استفاده از چندین ویژگی داشته باشیم، به چند ترفند خاص نیاز داریم.
const records = [
{
id: '1',
country: 'Colombia',
value: 500,
hasDetail: true,
timestamp: '2023-04-27T02:23:39.000Z'
},
{
id: '2',
country: 'Spain',
value: 1_000,
hasDetail: true,
timestamp: '2015-04-27T23:31:05.000Z'
},
{
id: '3',
country: 'Argentina',
value: 1_000,
hasDetail: false,
timestamp: '2000-01-01T00:00:00.000Z'
},
{
id: '5',
country: 'Colombia',
value: 2_000,
hasDetail: true,
timestamp: '2023-04-27T02:23:39.000Z'
},
{
id: '6',
country: 'Spain',
value: 1_000,
hasDetail: false,
timestamp: '2018-04-27T23:31:05.000Z'
},
{
id: '4',
country: 'Argentina',
value: 100,
hasDetail: true,
timestamp: '2020-01-01T23:15:00.000Z'
}
]
این داده های خام (بدون مرتب سازی) با استفاده از console. Table(records)
نشان خواهد داد:
شناسه | کشور | ارزش | دارای جزئیات | مهر زمانی |
---|---|---|---|---|
‘1’ | “کلمبیا” | 500 | درست است، واقعی | ‘2023-04-27T02:23:39.000Z’ |
‘2’ | ‘اسپانیا’ | 1000 | درست است، واقعی | ‘2015-04-27T23:31:05.000Z’ |
‘3’ | “آرژانتین” | 1000 | نادرست | ‘2000-01-01T00:00:00.000Z’ |
‘5’ | “کلمبیا” | 2000 | درست است، واقعی | ‘2023-04-27T02:23:39.000Z’ |
‘6’ | ‘اسپانیا’ | 1000 | نادرست | ‘2018-04-27T23:31:05.000Z’ |
‘4’ | “آرژانتین” | 100 | درست است، واقعی | ’01-01-2020T23:15:00.000Z’ |
ابتدا باید با هر ویژگی یک شی مرتب سازی ایجاد کنیم.
records.sort((a, z) => {
const sort = {
id: a.id.localeCompare(z.id),
country: a.country.localeCompare(z.country),
value: a.value - z.value,
hasDetail: Boolean(a.hasDetail) - Boolean(z.hasDetail),
timestamp: new Date(a.timestamp) - new Date(z.timestamp)
}
...
})
سپس سفارش را با توجه به نیاز خود با استفاده از ||
اپراتور، با در نظر گرفتن این که اولویت را از چپ به راست دنبال می کند و برای ترتیب معکوس از آن استفاده می کند نفی ترفند در هر زمینه ای
records.sort((a, z) => {
...
return sort.country || -sort.value || sort.timestamp
})
و نتیجه اطلاعات مرتب شده به صورت زیر خواهد بود:
شناسه | 🔼کشور | 🔽ارزش | دارای جزئیات | 🔼مهر زمان |
---|---|---|---|---|
‘3’ | “آرژانتین” | 1000 | نادرست | ‘2000-01-01T00:00:00.000Z’ |
‘4’ | “آرژانتین” | 100 | درست است، واقعی | ’01-01-2020T23:15:00.000Z’ |
‘5’ | “کلمبیا” | 2000 | درست است، واقعی | ‘2023-04-27T02:23:39.000Z’ |
‘1’ | “کلمبیا” | 500 | درست است، واقعی | ‘2023-04-27T02:23:39.000Z’ |
‘2’ | ‘اسپانیا’ | 1000 | درست است، واقعی | ‘2015-04-27T23:31:05.000Z’ |
‘6’ | ‘اسپانیا’ | 1000 | نادرست | ‘2018-04-27T23:31:05.000Z’ |
توجه داشته باشید:
.sort()
آرایه را بی صدا می کند،.toSorted()
همین کار را انجام دهید اما یک آرایه جدید با عناصر مرتب شده برمی گرداند.
این روشهای مرتبسازی آرایه بهعنوان قطعهای در پسوند Arrow Functions Snippets برای VSCode موجود هستند.
این همه مردم!
کد نویسی مبارک 🖖