از طریق منوی جستجو مطلب مورد نظر خود در وبلاگ را به سرعت پیدا کنید
چگونه یک آرایه را بر اساس تاریخ در جاوا اسکریپت مرتب کنیم در این راهنمای کوتاه، تمام جنبه های ضروری مرتب سازی آرایه بر اساس تاریخ در جاوا اسکریپت را پوشش خواهیم داد. ساختار داده آرایه در جاوا اسکریپت دارای یک متد sort() داخلی است، اما برای مرتب سازی آرایه بر اساس تاریخ طراحی نشده است. فرمت های تاریخ زیادی وجود دارد …
سرفصلهای مطلب
معرفی
در این راهنمای کوتاه، تمام جنبههای ضروری مرتبسازی یک آرایه بر اساس تاریخ در جاوا اسکریپت را پوشش خواهیم داد.
ساختار داده آرایه در جاوا اسکریپت دارای یک داخلی است sort()
روش، اما برای استفاده برای مرتب سازی آرایه بر اساس تاریخ طراحی نشده است. فرمتهای تاریخ زیادی وجود دارد و ما باید مرتبسازی را بدون توجه به فرمت مورد استفاده برای نمایش تاریخ انجام دهیم.
ابتدا، اجازه دهید به برخی از مفاهیم و محدودیتهای اساسی که باید آنها را درک کنیم تا بتوانیم آن را تغییر دهیم، بپردازیم. sort()
روشی که بتواند عناصر یک آرایه را بر اساس تاریخ مرتب کند، و سپس چند مثال عملی نشان خواهیم داد که روش کار مرتب سازی بر اساس تاریخ را توضیح می دهد.
توجه داشته باشید: در این راهنما، ما آرایه ای از تاریخ ها را مرتب می کنیم، اما قوانین مشابه در مورد مرتب سازی آرایه ای از اشیاء حاوی ویژگی تاریخ اعمال می شود.
جاوا اسکریپت مرتب سازی() روش
همانطور که قبلا ذکر شد، Array
ساختار داده در جاوا اسکریپت دارای یک داخلی است sort()
روشی که برای مرتب سازی عناصر یک آرایه استفاده می شود. این sort()
روش با تبدیل عناصر به رشته های و مرتب سازی آن نمایش های رشته ای از عناصر از نظر واژگانی به ترتیب صعودی.
نکته مهم دیگری که باید در نظر داشت این است که sort()
روش عناصر را مرتب می کند درجا، به این معنی که آرایه اصلی را تغییر می دهد:
const exampleArray = ('bbb', 'aa', 'ddd', 'c');
exampleArray.sort();
console.log(exampleArray);
// Outputs: ('aa', 'bbb', 'c', 'ddd')
بدیهی است که sort()
روش برای کار با رشته ها طراحی شده است، اما اینطور است برای کار با تاریخ طراحی نشده است. برای مثال، فرض کنید میخواهیم آرایههای تاریخ زیر را مرتب کنیم:
const dates = ('Mar 16 2017', 'Jan 22 2021', 'Dec 31 2000');
dates.sort();
console.log(dates);
این خروجی مورد نظر آرایه ای خواهد بود که بر اساس تاریخ ها به ترتیب صعودی مرتب شده اند:
('Dec 31 2000', 'Mar 16 2017', 'Jan 22 2021')
اما خروجی واقعی خواهد بود:
('Dec 31 2000', 'Jan 22 2021', 'Mar 16 2017')
این اتفاق می افتد زیرا sort()
روش با مرتب سازی کار می کند نمایش های رشته ای عناصر، نه عناصر واقعی.
برای مثال، D
از جانب 'Dec 31 2000'
از نظر واژگانی کمتر از J
از جانب 'Jan 22 2021'
و غیره روی. این رفتار نامطلوب بدون توجه به فرمت تاریخ یکسان است، بنابراین، باید راهی برای آن پیدا کنیم را تغییر دهید sort()
روشی که آن را برای مرتب سازی تاریخ ها مناسب می کند.
آغازگر روی تاریخ ها در جاوا اسکریپت
برای اینکه بدانیم چگونه یک آرایه را بر اساس تاریخ در جاوا اسکریپت مرتب کنیم، ابتدا باید بدانیم که جاوا اسکریپت چگونه تاریخ ها را نشان می دهد.
به طور خلاصه، ساختار مورد استفاده برای نشان دادن تاریخ ها در جاوا اسکریپت a Date
هدف – شی، این کار را با ذخیره a انجام می دهد Number
که نشان دهنده تعداد میلی ثانیه از 1 ژانویه 1970 است.
چهار راه برای ایجاد a وجود دارد Date
شی، اما، در اصل، همه آنها تاریخ را به عنوان تاریخ ذخیره می کنند Number
، همانطور که قبلا توضیح داده شد:
// Blank constructor - the current date and time
const now = new Date();
// Date string as the argument
const exampleDate1 = new Date(dateString);
// Number of milliseconds since 1 Jan 1970 as the argument
const exampleDate2 = new Date(milliseconds);
// Year, month, ... as the argument
const exampleDate3 = new Date(year, month, day, hour, minute, second, millisecond);
با توجه به ماهیت مشکل مرتبسازی یک آرایه بر اساس تاریخ، از راه دوم استفاده میکنیم که نمایش رشته تاریخ را در قسمت ارسال میکنیم. Date
سازنده به طور کلی، 3 فرمت رشته وجود دارد که برای نمایش تاریخ ها استفاده می شود:
نام | قالب | مثال | مستقل از مرورگر |
تاریخ ISO | YYYY-MM-DD | “2017-09-24” | **بله** (به طور دقیق توسط استاندارد ISO تعریف شده است) |
تاریخ کوتاه | MM/DD/YYYY | “2017/09/24” | **نه ** (ممکن است متفاوت باشد روی مرورگرهای مختلف) |
تاریخ طولانی | DD ماه YYYY | “24 سپتامبر 2017” | **نه ** (ممکن است متفاوت باشد روی مرورگرهای مختلف) |
بنابراین، اگر بخواهیم یک را ایجاد کنیم Date
برای 24 سپتامبر 2017، ما این کار را به یکی از روش های زیر انجام خواهیم داد:
const date = new Date("2017-09-24");
// Or
const date = new Date("09/24/2017");
// Or
const date = new Date("24 September 2017");
همه اینها تاریخ دقیق یکسانی را نشان می دهند (همان تعداد میلی ثانیه از اول ژانویه 1970).
روش مرتب سازی آرایه بر اساس تاریخ در جاوا اسکریپت (نمایش رشته)
اکنون که می دانیم چگونه این کار را انجام می دهد Date
شی و sort()
روش کار، می توانیم روش استفاده از آن را توضیح دهیم sort()
روش مرتب سازی آرایه بر اساس تاریخ
اولاً، بیایید فرض کنیم که باید آرایه ای از تاریخ ها را مرتب کنیم:
// ('16 March 2017', '22 January 2021', '31 December 2000')
const dates = ('16 March 2017', '01/22/2021', '2000-12-31');
همانطور که می بینیم، عناصری از dates
آرایه نمایش رشته ای از برخی تاریخ ها هستند. همانطور که قبلاً بحث کردیم، به سادگی با استفاده از sort()
روش روی dates
خروجی مورد نظر را تولید نمی کند، بنابراین باید آن را تغییر دهیم تا برای مرتب سازی تاریخ ها مناسب باشد. ما این کار را با ایجاد یک سفارشی مناسب انجام خواهیم داد تابع مقایسه و انتقال آن به sort()
روش.
یک تابع مقایسهبه زبان ساده تابعی است که دو آرگومان (اعداد) را می پذیرد و مقادیر مثبت، منفی یا صفر را برمی گرداند. برای تعریف ترتیب مرتب سازی در a استفاده می شود sort()
روش.
به عنوان مثال، تابع مقایسه زیر برای مرتب سازی عناصر به ترتیب صعودی استفاده می شود:
function(a, b){
return a - b;
}
قوانین زیر برای ترتیب مرتب سازی بر اساس اعمال می شود روی مقدار بازگشتی یک تابع مقایسه:
ارزش برگشتی | ترتیب مرتب سازی |
مثبت | b قبل از a |
صفر | یکسان |
منفی | a قبل از ب |
تابع مقایسه ای که می تواند تاریخ ها را مرتب کند باید ابتدا نمایش رشته ای تاریخ ها را به تبدیل کند Date
اشیاء و سپس دو تاریخ را به روش دلخواه مقایسه کنید. خوشبختانه، Date
سازنده فرمتهای بسیار متنوعی را میپذیرد و میتواند آنها را به قالبی قابل مقایسه ترجمه کند:
function(a, b){
// Convert string dates into `Date` objects
const date1 = new Date(a);
const date2 = new Date(b);
return date1 - date2;
}
برای مرتبسازی به ترتیب نزولی، تنها تغییری که باید انجام دهیم این است swap مکان های از date1
و date2
در بیانیه بازگشت:
return date2 - date1;
وقتی تابع مقایسه مناسب را ایجاد کردیم، تنها کاری که باید انجام دهیم این است که آن را به تابع ارسال کنیم sort()
روشی برای اینکه بتواند تاریخ ها را مرتب کند:
dates.sort(function(a, b){
const date1 = new Date(a)
const date2 = new Date(b)
return date1 - date2;
})
همچنین، می توانید تابع را به عنوان یک تابع غیر ناشناس تعریف کنید و آن را به این صورت ارسال کنید:
function dateComparison(a, b) {
const date1 = new Date(a)
const date2 = new Date(b)
return date1 - date2;
}
dates.sort(dateComparison);
console.log(dates);
در حال حاضر dates
آرایه به ترتیب صعودی مرتب شده است:
('2000-12-31', '16 March 2017', '01/22/2021')
روش مرتب سازی آرایه بر اساس تاریخ در جاوا اسکریپت (اشیاء تاریخ)
نسخه ساده تر این مشکل در موردی است که dates
آرایه در حال حاضر یک آرایه از Date
اشیاء. در آن صورت، ساده ترین تابع مقایسه این کار را انجام می دهد:
const date1 = new Date('16 March 2017');
const date2 = new Date('01/22/2021');
const date3 = new Date('2000-12-31');
const dates = (date1, date2, date3);
dates.sort(function(a, b){
return a - b
});
console.log(dates);
خروجی خواهد بود:
('2000-12-31', '16 March 2017', '01/22/2021')
نتیجه
در این راهنما، حقایق مهم در مورد مرتبسازی یک آرایه بر اساس تاریخ را مورد بحث قرار دادهایم. پس از اتمام آن، باید دانش مرتب سازی آرایه ها را داشته باشید، Date
اشیاء، و شما می توانید آنچه را که آموخته اید ترکیب کنید تا آرایه ای از تاریخ ها را به ترتیب دلخواه مرتب کنید.
منتشر شده در 1403-01-14 00:52:03