٪۴۰ تخفیف تابستانه شروع شد! بزرگترین حراج سال ما

به ما بپیوندید

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

مرتب سازی یک آرایه این sort()روش یک آرایه را به ترتیب حروف الفبا مرتب می کند: مثال const fruits = ["Banana", "Orange", "Apple", "Mango"]; fruits.sort(); // Sorts the elements of fruits معکوس کردن یک آرایه reverse()روش معکوس عناصر در یک آرایه.…

محمد یوسفی

19 جولای 2021

مرتب سازی یک آرایه

این sort()روش یک آرایه را به ترتیب حروف الفبا مرتب می کند:

مثال

const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();        // Sorts the elements of fruits

معکوس کردن یک آرایه

reverse()روش معکوس عناصر در یک آرایه.

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

مثال

const fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.sort();        // First sort the elements of fruits
fruits.reverse();     // Then reverse the order of the elements

مرتب سازی عددی

به طور پیش فرض ، این sort()تابع مقادیر را به عنوان رشته مرتب می کند .

این برای رشته ها به خوبی کار می کند (“Apple” قبل از “Banana” ارائه می شود).

با این حال ، اگر اعداد به صورت رشته مرتب شوند ، “25” بزرگتر از “100” است ، زیرا “2” بزرگتر از “1” است.

به همین دلیل ، این sort()روش هنگام مرتب سازی اعداد نتیجه نادرستی ایجاد می کند.

با ارائه یک تابع مقایسه می توانید این مشکل را برطرف کنید :

مثال

const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});

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

مثال

const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});


عملکرد مقایسه

هدف از تابع مقایسه تعریف یک ترتیب مرتب سازی جایگزین است.

بسته به استدلال ها ، تابع مقایسه باید مقدار منفی ، صفر یا مثبت برگرداند:

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

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

اگر نتیجه منفی باشد a، مرتب شده است b.

اگر نتیجه مثبت bباشد قبلا مرتب شده است a.

اگر نتیجه 0 باشد ، هیچ تغییری با ترتیب مرتب سازی دو مقدار انجام نمی شود.

مثال:

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

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

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

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

<button onclick="myFunction1()">Sort Alphabetically</button>
<button onclick="myFunction2()">Sort Numerically</button>

<p id="demo"></p>

<script>
const points = [40, 100, 1, 5, 25, 10];
document.getElementById("demo").innerHTML = points;

function myFunction1() {
  points.sort();
  document.getElementById("demo").innerHTML = points;
}

function myFunction2() {
  points.sort(function(a, b){return a - b});
  document.getElementById("demo").innerHTML = points;
}
</script>

مرتب سازی آرایه ای به ترتیب تصادفی

مثال

const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return 0.5 - Math.random()});

روش فیشر یتس

مثال فوق ، آرایه .sort () دقیق نیست ، بعضی از اعداد را نسبت به دیگران ترجیح می دهد.

مشهورترین روش صحیح ، جابجایی فیشر یتس نام دارد و از اوایل سال 1938 در علم داده معرفی شد!

در JavaScript روش را می توان به این صورت ترجمه کرد:

مثال

const points = [40, 100, 1, 5, 25, 10];

for (let i = points.length -1; i > 0; i--) {
  let j = Math.floor(Math.random() * i)
  let k = points[i]
  points[i] = points[j]
  points[j] = k
}

بالاترین (یا کمترین) مقدار آرایه را پیدا کنید

هیچ توابع داخلی برای یافتن مقدار حداکثر یا حداقل در یک آرایه وجود ندارد.

با این حال ، بعد از اینکه آرایه ای را مرتب کردید ، می توانید از index برای بدست آوردن بالاترین و کمترین مقادیر استفاده کنید.

مرتب سازی صعودی:

مثال

const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return a - b});
// now points[0] contains the lowest value
// and points[points.length-1] contains the highest value

مرتب سازی نزولی:

مثال

const points = [40, 100, 1, 5, 25, 10];
points.sort(function(a, b){return b - a});
// now points[0] contains the highest value
// and points[points.length-1] contains the lowest value

اگر فقط می خواهید بالاترین (یا کمترین) مقدار را پیدا کنید ، مرتب سازی یک آرایه کامل یک روش بسیار ناکارآمد است.


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

می توانید Math.max.applyبیشترین تعداد را در یک آرایه پیدا کنید:

مثال

function myArrayMax(arr) {
  return Math.max.apply(null, arr);
}

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


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

می توانید Math.min.applyکمترین تعداد را در یک آرایه پیدا کنید:

مثال

function myArrayMin(arr) {
  return Math.min.apply(null, arr);
}

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


حداقل / حداکثر روشهای جاوا اسکریپت من

سریعترین راه حل استفاده از روش “خانگی” است.

این تابع در یک آرایه قرار می گیرد و هر مقدار را با بالاترین مقدار پیدا شده مقایسه می کند:

مثال (یافتن حداکثر)

function myArrayMax(arr) {
  let len = arr.length;
  let max = -Infinity;
  while (len--) {
    if (arr[len] > max) {
      max = arr[len];
    }
  }
  return max;
}

این تابع در یک آرایه قرار می گیرد و هر مقدار را با کمترین مقدار مقایسه می کند:

مثال (یافتن حداقل)

function myArrayMin(arr) {
  let len = arr.length;
  let min = Infinity;
  while (len--) {
    if (arr[len] < min) {
      min = arr[len];
    }
  }
  return min;
}

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

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

مثال

const cars = [
  {type:"Volvo", year:2016},
  {type:"Saab", year:2001},
  {type:"BMW", year:2010}
];

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

راه حل این است که یک تابع مقایسه را برای مقایسه مقادیر ویژگی بنویسید:

مثال

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();
  if (x < y) {return -1;}
  if (x > y) {return 1;}
  return 0;
});

منبع

مطالب مرتبط

0 0 رای ها
امتیازدهی به مقاله
اشتراک در
اطلاع از
guest
0 نظرات
بازخورد (Feedback) های اینلاین
مشاهده همه دیدگاه ها