آرایه js

اگر که آرایه‌ای از اشیا دارید که بایستی به شکلی مرتب شوند، خیلی راحت می توانید از تابع جاوااسکریپت با نام array.sort استفاده کنید.

در شیوه آسان مرتب سازی آرایه به صورت پیش فرض، array.sort هر عنصر در آرایه را که بایستی مرتب شود را به یک رشته تبدیل کرده و آن را با موقعیت کد یونیکد مقایسه می کند.

ممکن است که در عجب باشید که چرا 32 پیش از 5 ظاهر شده است. منطقی نیست؟ خب، در واقع منطقی هست. این مساله به این خاطر رخ می دهد که هر عنصر در آرایه ابتدا به یک رشته تبدیل می شود و 32 در ترتیب یونیکد پیش از 5 قرار می گیرد.

جاوااسکریپت چیست؟

array.sort تنها ترتیب آرایه را تغییر می دهد.

برای حل این مساله، می توانید نمونه ای از آرایه را برای ذخیره سازی ایجاد کنید و آن را تغییر دهید. این کار با متدی از آرایه که یک کپی از آرایه مدنظر ما برمیگرداند امکان پذیر است. برای مثال array.slice

یا اگر شیوه نوشتار جدیدتری را ترجیح می دهید می توانید از عملگر نقطه با همان نتیجه استفاده کنید:

خروجی هر دو مورد یکسان خواهد بود.

استفاده از array.sort به تنهایی برای مرتب سازی آرایه ای از اشیا خیلی مفید واقع نخواهد شد. خوشبختانه این تابع یک پارامتر دیگر به نام compareFunction قبول می کند که باعث می شود عناصر آرایه مطابق با مقدار برگشی تابع مقایسه ای مرتب شوند.

شیوه نوشتار جاوااسکریپت

استفاده از توابع مقایسه ای برای مرتب سازی

اجازه دهید دو عنصر foo و bar را با استفاده از تابع مقایسه ای مقایسه کنیم. مقدار برگشتی تابع مقایسه ای به صورت زیر است:

  • 1. کمتر از 0 – foo پیش از bar می آید.
  • 2. بزرگتر از 0 – bar پیش از foo می آید
  • 3. برابر با 0 – foo و bar با توجه به یکدیگر بدون تغییر می مانند.

اجازه دهید با آرایه ای از اعداد مثالی بزنیم.

مثال زیر را به عنوان تفریق a از b در نظر داشته باشید:

تابع بالا را می توان به صورت تابع arrow نیز نوشت:

چگونه آرایه ای از اشیا را در جاوااسکریپت مرتب سازی کنیم؟

حالا اجازه دهید ببینیم که چطور می توان آرایه ای از اشیا را در جاوااسکریپت مرتب کرد.

می توانیم از تابع مقایسه ای زیر برای مرتب سازی این آرایه از خوانندگان مطابق برندشان استفاده کنیم:

برای رزرو کردن شیوه مرتب سازی، می توانید مقدار بازگشتی را با استفاده از تابع compare معکوس کنید:

ساخت تابع پویای مرتب سازی

اجازه دهید تابع مرتب سازی بسازیم که می توانید از آن برای مرتب سازی آرایه ای از اشیا استفاده کنید که مقادیرش رشته یا اعداد می باشد. این تابع دو پارامتر دارد – کلیدی که ما می خواهیم به صورت صعودی یا نزولی مرتبش کنیم.

و طریقه استفاده از آن به صورت زیر است:

در کد بالا، متد hasOwnProperty برای بررسی این مساله به کار می رود که خصوصیت مشخص شده در هر شی تعریف شده و از طریق prototype ارث برده نمی شود. اگر در هر دو شی تعریف نشود، تابع مقدار 0 را بازمیگرداند که باعث می شود شیوه مرتب سازی به همان صورتی که بوده باقی بماند (یعنی اشیا با توجه به یکدیگر دست نخورده باقی می مانند).

Callback جاوااسکریپت چیست و چگونه کار می‌کند؟

عملگر typeof نیز برای بررسی نوع داده های مقدار خصوصیت به کار می رود. این عملگر به تابع اجازه می دهد تا روش مناسبی را برای مرتب سازی آرایه تعیین کند. برای مثال، اگر مقدار خصوصیت مشخص شده یک رشته است، متد toUpperCase برای تبدیل تمام کاراکتر به حروف بزرگ به کار می رود، بنابراین بزرگی کوچکی کاراکتر در زمان مرتب سازی نادیده گرفته می شود.

می توانید تابع بالا را طوری تنظیم کنید تا مطابق با دیگر انواع داده و هر نیازی باشد که اسکریپت شما ممکن است داشته باشد.

()String.prototype.localeCompare

در مثال بالا، ما می خواستیم تا آرایه ای از اشیا را مرتب کنیم که مقادیرشان رشته یا عدد بودند. اگر سروکارتان با اشیایی است که مقادیرشان رشته هستند می توانید کد را اندکی با استفاده از متد localeCompare سروسامان دهید.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

question