الصفيف المشجعي يعني تعطيل ترتيب جميع العناصر في الصفيف.
تتمثل الطريقة الشائعة في تمرير وظيفة إلى طريقة الفرز الأصلي للمصفوفة ، والتي تُرجع بشكل عشوائي 1 أو -1 لتحقيق الغرض من عناصر الصفيف العشوائية.
نسخة الكود كما يلي:
arr.sort (function (a ، b) {return math.random ()>. 5؟ -1: 1 ؛}) ؛
على الرغم من أن هذه الطريقة بديهية ، إلا أنها ليست فعالة. بعد اختباري ، أفسدت مجموعة من 10000 عنصر ، وكان الوقت الذي استغرقه حوالي 35 مللي ثانية (Firefox)
لطالما كان لدي جودة ممتازة لكسر خزفي لأطلب النهاية ، لذلك وجدت طريقة فعالة. انظر هذا النص الأصلي
نسخة الكود كما يلي:
if (! array.prototype.shuffle) {
Array.Prototype.shuffle = function () {
لـ (var j ، x ، i = this.length ؛ i ؛ j = parseint (math.random () * i) ، x = this [-i] ، this [i] = this [j] ، this [j] = x) ؛
إرجاع هذا ؛
} ؛
}
arr.shuffle () ؛
تضيف هذه الطريقة وظيفة إلى Array.Prototype ، والتي تسمى Shuffle - لكن الاسم لا يهم ، ما هو مهم هو كفاءتها.
خذ صفيف 10000 عنصر أعلاه لاختباره. لا يستغرق الأمر سوى 7 أو 8 مللي ثانية لإكماله بالترتيب باستخدام هذه الطريقة.
زيادة عناصر الصفيف من 10 مرات إلى 100000 للاختبار. تستغرق طريقة الفرز الأول حوالي 500+مللي ثانية ، وتستغرق طريقة خلط الخلط حوالي 40 مللي ثانية. الفرق ضخم.
رمز الاختبار الكامل:
نسخة الكود كما يلي:
var count = 100000 ، arr = [] ؛
لـ (var i = 0 ؛ i.5؟ -1: 1 ؛}) ؛
Array.Prototype.sort.call (arr ، function (a ، b) {return math.random ()>. 5؟ -1: 1 ؛}) ؛
document.write (arr+'
') ؛
var t1 = new date (). getTime () ؛
document.write (T1-T) ؛
// الأساليب التالية أكثر كفاءة
if (! array.prototype.shuffle) {
Array.Prototype.shuffle = function () {
لـ (var j ، x ، i = this.length ؛ i ؛ j = parseint (math.random () * i) ، x = this [-i] ، this [i] = this [j] ، this [j] = x) ؛
إرجاع هذا ؛
} ؛
}
var t = date date (). getTime () ؛
arr.shuffle () ؛
document.write ('
'+arr+'
') ؛
var t1 = new date (). getTime () ؛
document.write (T1-T) ؛
بالإضافة إلى ذلك ، هل لاحظت حلقة من أجل رمز خلط الخلط؟ ليس لديها الشوط الثاني! هذا هو ، هناك فقط لـ (..) ولكن ليس ما يلي {..} ، حتى تتمكن من الكتابة بهذه الطريقة! وقد تم تنفيذه في الواقع بشكل طبيعي! إنه أمر فضولي للغاية ، يجب أن أذهب إلى حديقة المدونة لأطلب.