نحوه بهم ریختن تصادفی (Shuffle) آرایه در Javascript

دسته بندی: آموزش
زمان مطالعه: 2 دقیقه
۱۷ اردیبهشت ۱۳۹۷

نحوه بهم ریختن تصادفی (Shuffle) آرایه در Javascript

نحوه بهم ریختن تصادفی (Shuffle) آرایه در Javascript

در این مطلب میخوایم یاد بگیریم که چطور میتونیم اعضای یک آرایه در Javascript رو بصورت تصادفی بچینیم و ترتیب اونا (Shuffle) رو بهم بریزیم. این کار بعضی اوقات به دردمون میخوره و در این مطلب یادش میگیریم.

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

var arr = [2, 11, 37, 42];

همونطور که میبینید یک آرایه 4 عضوی رو تعریف کردیم. الگوریتم معروفی که در این زمینه وجود داره، Fisher-Yates هست. میتونین نحوه کارکرد این الگوریتم رو بصورت تصویری در اینجا ببینید و در اینجا هم توضیحات کامل اون رو ببینید. این الگوریتم رو بصورت زیر میشه پیاده سازی کرد:

function shuffle(array) {
  var currentIndex = array.length, temporaryValue, randomIndex;

  // While there remain elements to shuffle...
  while (0 !== currentIndex) {

    // Pick a remaining element...
    randomIndex = Math.floor(Math.random() * currentIndex);
    currentIndex -= 1;

    // And swap it with the current element.
    temporaryValue = array[currentIndex];
    array[currentIndex] = array[randomIndex];
    array[randomIndex] = temporaryValue;
  }

  return array;
}

حالا میتونین از این تابع استفاده کنید. بصورت زیر:

var arr = [2, 11, 37, 42];
console.log(shuffle(arr)); // ​​​​​[ 11, 42, 37, 2 ]​​​​​

میبینید که اعضای آرایه بصورت تصادفی جابجا شدند.

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

function shuffleArray(array) {
  for (var i = array.length - 1; i > 0; i--) {
    var j = Math.floor(Math.random() * (i + 1));
    var temp = array[i];
    array[i] = array[j];
    array[j] = temp;
  }

  return array;
}

از این تابع هم میتونین استفاده کنید.

اگر میخواید از ES6 استفاده کنید میتونین بصورت زیر عمل کنید:

function shuffleArray(array) {
  for (let i = array.length - 1; i > 0; i--) {
    let j = Math.floor(Math.random() * (i + 1));
    [array[i], array[j]] = [array[j], array[i]];
  }
  
  return array;
}

از هر کدام از توابع بالا که خواستید میتونین استفاده کنید.

اگر شما هم روشی برای انجام اینکار به ذهنتون میرسه خوشحال میشیم که در بخش نظرات با ما در میان بذارید.

چه امتیازی به این مقاله می دید؟
نویسنده محمد اسفندیاری
بسیار به طراحی وب علاقمندم و به سرعت در حال یادگیری تمام مباحث پیشرفته هستم و دوست دارم که به دیگران هم یاد بدهم.

نظرات کاربران

اولین دیدگاه این پست رو تو بنویس !

ارسال دیدگاه
خوشحال میشیم دیدگاه و یا تجربیات خودتون رو با ما در میون بذارید :