إذا كان هناك صفيف مثل هذا:
var arr1 = ["A" ، "B" ، "C" ، "D"] ؛
كيفية تعطيل ترتيب الصفيف بشكل عشوائي ، وهذا هو ، خلطه.
هناك خوارزمية عشوائية بسيطة تنتشر على نطاق واسع:
وظيفة randomsort (a ، b) {return (0.5 - Math.Random ()) ؛ }في الواقع ، ثبت أن ما سبق ليس عشوائيًا تمامًا.
لقد بحثت للتو عن الكثير من هذه الأشياء على الإنترنت. دعنا نلقي نظرة على إجابة عالية الدرجات على Stackoverflow. الجواب يأتي من جيثب.
knuth-shuper
The Fisher-Yates (AKA Knuth) خلط ورق اللعب للمتصفح و node.js
دعونا نلقي نظرة على الخوارزمية المذكورة أعلاه. الرمز كما يلي:
! ! == currentIndex) {// اختر عنصرًا متبقيًا ... RandomIndex = math.floor (math.random () * currentIndex) ؛ currentIndex -= 1 ؛ // ومبادلة العنصر الحالي. = Shuffle ؛} ('undefined'! == typeof orports && orports || 'undefined'! == typeof window && window || global)) ؛يوصي المؤلف باستخدام طريقة كتابة المتصفح:
(function () {'use strict' ؛ var a = [2،11،37،42] ، b ؛ // يعدل خلط الخلط المصفوف الأصلي // calling a.slice (0) إنشاء نسخة ، تم تعيينها إلى bb = window.knuthshuffle (a.slice (0)) ؛ console.log (b) ؛} () ؛Nodejs:
NPM Install -S Knuth-Shuffle (function () {'use strict' ؛ var shuffle = require ('Knuth-shuffle'). Knuthshuffle ، a = [2،11،37،42] ، b ؛ // whuled moding the array // calling a.slice (0) يخلق نسخة ، يتم تعيينها إلى bb = shuffle (A.Slice (0) ؛هناك آخرون مشوهون من هذه الخوارزمية ، مثل ما يلي للحلقة. لن أتحدث عن أي شيء آخر.
/*** ترتيب عنصر صفيف عشوائي عشوائي في المكان.* باستخدام خوارزمية Durstenfeld Dhuffle. Temp ؛} Array ؛}
باستخدام ES2015 (ES6)
Array.Prototype.shuffle = function () {let m = this.length ، i ؛ بينما (m) {i = (math.random () * m--) >>> 0 ؛ [هذا [m] ، هذا [i]] = [هذا [i] ، هذا [m]]}يستخدم:
[1 ، 2 ، 3 ، 4 ، 5 ، 6 ، 7] .shuffle () ؛
لقد وجدت الكثير من الخوارزميات العشوائية للبحث الصيني ، ولكن ما إذا كان عشوائيًا تمامًا لا يزال ضروريًا ، ولا يزال يتعين التحقيق في الكفاءة والتوافق. من المستحسن أنه إذا كنت بحاجة إلى استخدام عناصر الصفيف العشوائية في وقت لاحق ، فيمكنك استخدام ما أعلاه.