سؤال

ولقد خلق موقع لصديق الفنان من الألغام، وأنها تريد تخطيط على حالها، لكنها تريد أيضا لوحات جديدة وقالت انها تريد إنتاجها إلى أن تكون مختلطة في التخطيط الحالي. لذلك ليس لدي 12 الصور المصغرة (thumb1 - thumb12) على الصفحة الرئيسية معرض الصور و18 (IMG1 - img18) لوضع فضلا

وكان نهج فكرت في إنشاء مجموعة من كل الصور، بطريقة عشوائية، ثم ببساطة كشط أول 12 وتحميلها في فتحات الإبهام. وهناك نهج آخر يتمثل في اختيار 12 الصور بشكل عشوائي من مجموعة. في الحالة الأولى، لا أستطيع أن أجد وسيلة لعشوائية عناصر صفيف. وفي الحالة الأخيرة، لا أستطيع أن التفاف ذهني حول كيفية الحفاظ على الصور من تحميل أكثر من مرة، وغيرها من استخدام مجموعة الثانية، والذي يبدو غير فعال جدا ومخيفة.

وأنا أفعل كل هذا في جافا سكريبت، من جانب الطريق.

هل كانت مفيدة؟

المحلول

وأنا كتبت هذا منذ فترة، ويحدث ذلك لتتناسب مع ما كنت أبحث عنه. اعتقد انها فيشر ييتس خلط ورق اللعب التي ojblass يشير إلى:

Array.prototype.shuffle = function() {
   var i = this.length;
   while (--i) {
      var j = Math.floor(Math.random() * (i + 1))
      var temp = this[i];
      this[i] = this[j];
      this[j] = temp;
   }

   return this; // for convenience, in case we want a reference to the array
};

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

var randomSubset = originalArray.shuffle().slice(0,13);

وأو، إذا كنت لا ترغب في تعديل الواقع الأصلي:

var randomSubset = originalArray.slice(0).shuffle().slice(0,13);

نصائح أخرى

ويجب تنفيذ فيشر ييتس خلط (والمعروف باسم خلط كانوث ).

وانظروا الجواب كبيرة قدمت <لأ href = "https://stackoverflow.com/questions/790083/does-qsort-demand-consistent-comparisons-or-can-i-use-it-for-shuffling/ 790097 # 790097 "> هنا .

والنهج الأول ستعمل. مجرد خلط العناصر 18 واتخاذ أول 12.

وكنت مؤخرا قد جاء عبر هذه المشكلة نفسي. وظيفة هنا ساعد: <لأ href = "http://waseemsakka.com/2012/02/14/javascript-dropping-the-last-parts-of-an-array-and-randomizing-the-order-of- ومصفوفة / "يختلط =" نوفولو "> http://waseemsakka.com/2012/02/14/javascript-dropping-the-last-parts-of-an-array-and-randomizing-the-order-of -وهو مصفوفة / .

وأساسا، تبدأ من خلال التعشءه مجموعة الخاص بك:

thumbs.sort(function(a, b) {
     return Math.random() - 0.5;
})

وهذا سوف بطريقة عشوائية ترتيب 18 العناصر الخاصة بك. ثم لتبقي فقط على العناصر 12 الأولى، وكنت مجرد قطرة آخر 6:

thumbs.length = 12;
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top