"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية توليد أرقام عشوائية غير متكررة في جافا سكريبت بشكل فعال؟

كيفية توليد أرقام عشوائية غير متكررة في جافا سكريبت بشكل فعال؟

تم النشر بتاريخ 2024-11-08
تصفح:882

How to Generate Non-Repeating Random Numbers in JavaScript Effectively?

توليد أرقام عشوائية غير متكررة في JS

يمكن توليد أرقام عشوائية غير متكررة في JS باستخدام تقنيات مختلفة. في الأصل، كان النهج هو التحقق مما إذا كان الرقم الذي تم إنشاؤه حديثًا قد تم إنشاؤه بالفعل عن طريق إضافته إلى مصفوفة ومقارنته به. ومع ذلك، يمكن أن يؤدي هذا إلى خطأ "تم تجاوز الحد الأقصى لحجم مكدس الاستدعاءات" بسبب المكالمات المتكررة المفرطة.

الحل الفعال هو إنشاء قائمة عشوائية من الأرقام مرة واحدة والعمل من خلالها بشكل تسلسلي. يلغي هذا الأسلوب الحاجة إلى الاستدعاءات المتكررة ويضمن عدم التكرار.

إليك مثال على استخدام Fisher–Yates Shuffle:

function shuffle(array) {
    var i = array.length,
        j = 0,
        temp;

    while (i--) {
        j = Math.floor(Math.random() * (i 1));
        temp = array[i];
        array[i] = array[j];
        array[j] = temp;
    }
    return array;
}

var ranNums = shuffle([1,2,3,4,5,6,7,8,9,10]);

بدلاً من ذلك، يمكن استخدام المولدات لهذا الغرض:

function* shuffle(array) {
    var i = array.length;
    while (i--) {
        yield array.splice(Math.floor(Math.random() * (i 1)), 1)[0];
    }
}

var ranNums = shuffle([1,2,3,4,5,6,7,8,9,10]);

ranNums.next().value; // first random number from array
ranNums.next().value; // second random number from array
...

توفر هذه التقنيات طرقًا فعالة لإنشاء أرقام عشوائية غير متكررة في JavaScript، مما يؤدي إلى التخلص من المشكلات المتعلقة بالاستدعاءات المتكررة المفرطة.

بيان الافراج أعيد طبع هذه المقالة على: 1729382177 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3