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

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

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

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

مرتب کردن آرایه (Array Sort)

در زبان جاوا اسکریپت ما متدی به نام ()sort داریم که این متد یک آرایه را براساس حروف الفبا مرتب می کند. مثال زیر آرایه ای از اسامی میوه ها را براساس حروف الفبا مرتب می کند.

آموزش طراحی سایت

خروجی مثال بالا به شکل زیر است:

آموزش Javascript

برعکس کردن آرایه (Array Reverse)

متد ()reverse در زبان جاوا اسکریپت عنصرهای یک آرایه را برعکس می کند. به عبارتی شما می توانید از این متد برای نزولی کردن ترتیب عناصر آرایه استفاده کنید. مثال زیر نحوه انجام این کار را نشان می دهد.

آموزش مرتب سازی آرایه

خروجی مثال بالا به شکل زیر است:

آموزش جاوا اسکریپت

ترتیب عددی

به صورت پیش فرض، تابع ()sort مقادیر آرایه را به عنوان رشته مرتب می کند. این قابلیت برای رشته ها به خوبی کار می کند (به عنوان مثال Apple قبل از Banana می آید). بر این اساس اگر اعداد به عنوان رشته مرتب شده باشند، 25 از 100 بزرگتر است چون 2 بزرگتر از 1 می باشد. به همین دلیل، متد ()sort هنگام مرتب کردن اعداد، جواب های نادرست تولید خواهد کرد.

شما می توانید این مشکل را با یک تابع مقایسه حل کنید.

خروجی مثال بالا به شکل زیر است:

آموزش طراحی سایت

و همین روش را برای مرتب کردن آرایه به صورت نزولی نیز استفاده کنید:

آموزش مرتب سازی آرایه

تابع مقایسه

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

function(a, b){return a - b}

وقتی تابع ()sort دو مقدار را مقایسه می کند، مقادیر را به تابع مقایسه می برد و طبق مقداری که برگشته است مقادیر را مرتب می کند (منفی، صفر، مثبت).

اگر پاسخ تابع مقایسه منفی باشد a قبل از b مرتب می شود.

اگر پاسخ تابع مقایسه مثبت باشد b قبل از a مرتب می شود.

اگر پاسخ تابع مقایسه 0 باشد ترتیب قرار گیری دو مقدار هیچ تغییری نمی کند.

مثال:

تابع مقایسه تمام مقادیر را در آرایه مقایسه می کند، هر بار دو مقدار (a, b).

وقتی 40 و 100 مقایسه می شوند، متد sort() تابع مقایسه را فرا می خواند.

تابع 40 - 100 (a - b) را محاسبه می کند، و از آنجا که پاسخ منفی است، تابع ()sort مقدار 40 را بعنوان مقدار کمتر از 100 مرتب می کند.

 شما می توانید از کد زیر برای مرتب کردن مقادیر آرایه به صورت عددی و الفبایی استفاده کنید:

آموزش طراحی سایت

خروجی مثال بالا به شکل زیر است:

آموزش جاوا اسکریپت

مرتب کردن یک آرایه بصورت تصادفی (Random)

برای مرتب کردن یک آرایه به صورت تصادفی از متد ()random استفاده می شود. مثال زیر نحوه انجام این کار را نشان می دهد:

آموزش مرتب سازی آرایه

خروجی مثال بالا به شکل زیر است:

آموزش طراحی سایت

متد Fisher Yates

مثال بالا ()array.sort  صحیح نیست، چون چند عدد را به بقیه ترجیح می دهد. محبوب ترین و درست ترین متد، آمیختگی Fisher Yates می باشد، که برای اولین بار در سال 1938 معرفی شد. آمیختگی فیشر یتس یا بر زدن فیشر یتس الگوریتمی برای ایجاد جایگشت تصادفی از یک دنباله است. این کار همانند بر زدن ورق در بازی پاسور می باشد و بر زدن آرایه به این معناست که هر کدام از جایگشت های ممکن با احتمال مساوی بیایند.

در جاوا اسکریپت این متد می تواند مانند بخش زیر پیاده سازی شود:

آموزش Sorting Arrays

خروجی مثال بالا به شکل زیر است:

آموزش Javascript

پیدا کردن بزرگترین یا کوچکترین مقدار آرایه

در زبان جاوا اسکریپت تابعی برای پیدا کردن بزرگترین و کوچترین مقدار در یک آرایه تعبیه نشده است. اما بعد از اینکه آرایه را مرتب کردید، می توانید از index اولین خانه آرایه برای یافتن بزرگترین و کوچکترین مقدار آرایه استفاده کنید.

در مثال زیر آرایه points به صورت صعودی مرتب شده است. بنابراین اولین عنصر آرایه کوچکترین مقدار آرایه است.

آموزش Sorting Arrays

خروجی مثال زیر به شکل زیر است. همانطور که می بینید مقدار 1 به عنوان کوچکترین مقدار آرایه نمایش داده شده است.

آموزش جاوا اسکریپت

در مثال زیر آرایه points به صورت نزولی مرتب شده است. بنابراین اولین عنصر آرایه بزرگترین مقدار آرایه است.

آموزش مرتب سازی آرایه

خروجی مثال زیر به شکل زیر است. همانطور که می بینید مقدار 100 به عنوان بزرگترین مقدار آرایه نمایش داده شده است.

آموزش Javascript

استفاده از ()Math.max.apply روی آرایه

برای پیدا کردن بزرگترین عدد در آرایه می توانید از ()Math.max.apply استفاده کنید:

آموزش طراحی سایت

خروجی مثال بالا به شکل زیر است:

آموزش Sorting Arrays

Math.max.apply(null, [1, 2, 3]) با Math.max(1, 2, 3) برابر است.

استفاده از ()Math.min روی آرایه

می توانید از ()Math.min.apply برای پیدا کردن کوچکترین مقدار در آرایه استفاده کنید. مثال زیر نحوه انجام این کار را نشان می دهد:

آموزش مرتب سازی آرایه

خروجی مثال زیر به شکل زیر است:

آموزش Sorting Arrays

Math.min.apply(null, [1, 2, 3]) برابر با Math.min(1, 2, 3) می باشد.

متدهای My Min / Max JavaScript

سریع ترین راه حل برای پیدا کردن بزرگترین و کوچکترین مقدار آرایه، استفاده از متد دست ساز می باشد. این تابع درون آرایه پیمایش می کند و هر مقدار را با بزرگترین مقدار یافت شده مقایسه می کند:

آموزش مرتب سازی آرایه

خروجی مثال بالا به شکل زیر است:

آموزش مرتب سازی آرایه

مثال زیر آرایه را پیمایش می کند و هر مقدار را با کوچکترین مقدار یافت شده مقایسه می کند:

آموزش جاوا اسکریپت

خروجی مثال بالا به شکل زیر است:

آموزش Javascript

مرتب کردن آرایه های اشیا

آرایه های جاوا اسکریپت اغلب شامل اشیا می شوند:

آموزش طراحی سایت

حتی اگر اشیا، property هایی با نوع داده های مختلف داشته باشند، متد ()sort را می توان برای مرتب کردن آرایه استفاده کرد.

راه حل، نوشتن یک تابع مقایسه برای مقایسه کردن مقادیر property ها است:

آموزش مرتب سازی آرایه

خروجی مثال بالا به شکل زیر است:

آموزش مرتب سازی آرایه

مقایسه ی مشخصه های رشته (string properties) کمی پیچیده تر می باشد:

آموزش جاوا اسکریپت

خروجی مثال بالا به شکل زیر است:

آموزش طراحی سایت

آموزش طراحی سایت آموزش مرتب سازی آرایه در جاوا اسکریپت آموزش جاوا اسکریپت آموزش JavaScript

مقالات این دسته بندی